代码改变世界

详解结构体、类等内存字节对齐

2013-11-02 20:58 by XiaoYi_, 877 阅读, 0 推荐, 收藏,
摘要:结构体存在内存对齐,类(对象)也如此,甚至于所有变量在内存中的存储也有对齐一说(只是这些对程序员是透明的,不需要关心)。实际上,这种对齐是为了在空间与复杂度上达到平衡的一种技术手段,简单的讲,是为了在可接受的空间浪费的前提下,尽可能的提高对相同运算过程的最少(快)处理。先举个例子: 假设机器字长是32位的(即4字节,下面示例均按此字长),也就是说处理任何内存中的数据,其实都是按32位的单位进行的。现在有2个变量: charA;intB; 假设这2个变量是从内存地址0开始分配的,如果不考虑对齐,应该是这样存储的(见下图,以intel上的little endian为例,为了形象,每16个字节... 阅读全文

c++类中的虚函数表

2013-10-28 12:33 by XiaoYi_, 400 阅读, 0 推荐, 收藏,
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没 阅读全文

关于单例类 singleton

2013-10-17 01:10 by XiaoYi_, 128 阅读, 0 推荐, 收藏,
摘要:class singleton{public :sigleton(){//do son=me thing}static singlton* modle = NULL;private :sigleton* getsigleton(){if(modle==NULL)modle = new sigleton();return modle ;}}单例类就是系统中只能有一个实例的类c++实现的一个单例类代码如下 阅读全文

BOOL , int , float , 指针 与 0 值得比较

2013-10-17 00:50 by XiaoYi_, 683 阅读, 0 推荐, 收藏,
摘要:if语句是C++/C语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句。本节以“与零值比较”为例,展开讨论。4.3.1布尔变量与零值比较 【规则4-3-1】不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。 根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如VisualC++将TRUE定义为1,而VisualBasic则将TRUE定义为-1。 假设布尔变量名字为flag,它与零值比较的标准if语句如下:if(flag) //表示flag为真if(!flag) 阅读全文

动态链接库和静态链接的区别库

2013-10-14 21:38 by XiaoYi_, 347 阅读, 0 推荐, 收藏,
摘要:静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。静态链接库与静态链接库调用规则总体比较如下。对于静态链接库(比较简单):首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。生成库的.h头文件中的 阅读全文

整形变量赋值给字符型变量

2013-10-14 21:22 by XiaoYi_, 3501 阅读, 0 推荐, 收藏,
摘要:把整形int的值赋给字符型的值会怎样呢 , 例如下面的代码 。int i = 97 ;char A = i ;printf("%d\n",A);输出 a , 因为char 型有8位 , int 赋值给她相当于取低的8位给字符变量 , 而a的ASCII正好是97 , 所以输出a ; 阅读全文