C/C++
文章平均质量分 70
walker沃克
http://walkerdu.com
展开
-
由类模版中static成员变量的定义引发的思考。。。
说到这个问题还要从一个项目说起,项目中整个系统的日志部分是通过单例模式进行管理的,在设计单例模式的时候,单例类的定义是定义成模版类,且为了实现每个单例类只能有一个实例,实例化返回的对象设计成静态成员变量,如下图Fig 1所示。 Fig 1.单例模式的定义由于代码正常习惯,类的定义和实现是分开的,分别在.h和.cpp文件中,所以在设计的时候也是分开的,后来就悲剧了,编译的时候怎么都是原创 2013-02-25 22:27:17 · 4082 阅读 · 1 评论 -
堆排序中建堆过程的时间复杂度O(n)的证明
下面是建立大根堆的代码template void CreateBigRootHeap(Type *array, int len){ int i, j, k; Type temp; for (i = (len - 1) / 2; i >= 0; --i) { temp = array[i]; k = i;原创 2013-04-16 15:38:26 · 23341 阅读 · 9 评论 -
进程中的地址是从何而来
写了这么多年代码,地址这个东西每天都会使用,那么今天总结一下地址这个东西的由来。 本文参考了参考了《程序员的自我修养》一书. 先看看下面代码:#include <iostream>#include <cstdint>void fun(){ std::cout<<"this a fun() "<<std::endl;}uint32_t a = 1;int main(){ u原创 2016-06-30 09:56:23 · 3499 阅读 · 6 评论 -
Boost:managed_mapped_file及C++内存分配和对象构造分析
Boost的提供了一套ipc的接口,内存映射文件将文件的内容映射到进程的地址空间。#include <boost/interprocess/file_mapping.hpp>原生的file_mapping接口提供了创建一个内存映射文件,然后通过mapped_region进行进程地址空间的映射,获取映射到进程空间的地址,并在此地址进行对象的构造和操作。由于直接在映射的地址进行复杂数据结构的构造很复杂的原创 2016-01-11 14:35:02 · 7555 阅读 · 2 评论 -
C++静态初始化的顺序
这两天项目代码中遇到一个很疑惑的问题,问题可以描述为:一个静态成员初始化的时候直接core掉,该静态成员初始化时通过另外一个文件中静态成员来完成。该问题同样发生在全局对象上。该问题可以描述为今天要讨论的:变量的静态初始化顺序。具体可以用代码简述如下://test1.cpp#include std::string a = "test"; //test2.cpp#inclu原创 2014-08-10 21:23:27 · 7751 阅读 · 3 评论 -
C++标准I/O库:iostream, fstream, sstringstream
在写代码的过程中,我们最常做的事就是io,无论原创 2014-06-09 21:29:47 · 6272 阅读 · 1 评论 -
Linux下将整数格式化成二进制表示的字符串
数据的格式化输出是我们在编程过程中经常要做的事情,我们最常用的莫过于sprintf函数。当然还有sprintf衍生出来的一些函数,譬如安全的snprintf。还有一个需要提到的就是不属于C标准的itoa函数。int sprintf ( char * str, const char * format, ... ); //成功返回写入str的字符个数,不包含结尾符,出错则返回负数原创 2013-12-01 21:46:28 · 5574 阅读 · 0 评论 -
内存对齐
今天复习了一下内存对齐的知识,觉得有必要记录一下。我想对于大部分非C/C++程序员,程序的内存布局对他们来说都是透明的,他们不需要关系编译器是如何进行程序的内存管理的。应该上层以及都把这些封装好了。内存对齐是属于编译器的工作,他把变量放到适合的内存位置中,以便程序能够高效率的存取这些变量,这是编译器实施内存对齐最主要的原因。关于内存对齐的原因大部分的参考资料都说:1、平台原因(移植原创 2013-03-31 22:30:30 · 1818 阅读 · 0 评论 -
x=x++带来的困惑。。。
今天微软实习生笔试,有一个题目,本来我认为没有什么值得考虑的,结果出来同学一讨论,出现一边倒的结果,当然我不是那一边的,我就想当郁闷呀。问题主要是:int x = 10;x = x++;cout<<x<<endl;我想也没想,这结果当然是10了,可以同学回来都说是11,然后再机器上一测试,结果果然是11,我感觉整个人生观被颠覆了。我清楚的记得后置形式自增/自减,的计算顺序原创 2013-04-06 17:52:14 · 3054 阅读 · 5 评论 -
sizeof(string)---容器string类型的大小
刚看到《程序员面试宝典》中有一个表达式说sizeof(string)大小是4,感到很是诧异,因为string容器的大小和string的实现有关,string类不是内置数据类型,而是一个模版类,所以它的大小和类的实现有关,具体我做了以下测试://sourcecout<<sizeof(string) <<endl;cout)<<endl;//编译器:VS2008//平台:X86//ou原创 2013-04-01 21:46:49 · 2084 阅读 · 3 评论 -
P-结构体成员的偏移量---宏定义实现
最近在找实习,前天接到Tencent的电话面试,有点小激动,一点准备都没有,站在实验室外楼梯边的窗户旁就这么开始了,一开始自我介绍,然后主要问了一下项目情况,后来就是基本的常识性的编程知识,最后问了一道算法题,在面试官的提醒下,最后基本都算答出来了,但有一题,尼玛我实在想不出来,也就没答出来,问题是:怎样求结构体成员的偏移量?我的第一反应是:定义结构体成员,然后取地址,求差值,然后面试官来了一原创 2013-03-30 21:55:09 · 1891 阅读 · 0 评论 -
SWIG之为C/C++的API生成Python调用接口基础
现在游戏业务的cache基本都是接入公司服务TCA,以前业务自己拥有cache的时候我们可以很方便去通过脚本去访问玩家的数据,所以最近想能不能对公司服务TCA生成Python的访问接口,由于公司服务TCA只提供了C++ API屏蔽了底层的协议数据细节,不太好直接写Python访问接口,偶然间接触到了SWIG,差不多花了一周时间,通过官方手册完成了SWIG对公司服务TCA Python 接口的封装。这原创 2017-12-06 16:11:58 · 1080 阅读 · 0 评论