C/C++的内存对齐
1、内存对齐之pragma pack语法 语法:#pragma pack( [show] | [push | pop] [, identifier], n ) 作用:指定结构,联合和类的包对齐方式(pack alignment),可以通知给编译器传递预编译指令而改变对指定数据的对齐方法 举个例子如下: 2、基本数据类型所占用内存大小 3、 静态变量static 静态变量 的存放位置与结构体实例的存储地址无关,是 单独存放在静态数据区的,因此用siezof计算其大小时没有将静态成员所占的空间计算进来。 4、 类 空类是会占用内存空间的,而且大小是1,原因是C++要求每个实例在内存中都有独一无二的地址。 (一)类内部的成员变量: 普通的变量要占用内存,但是要注意对齐原则(这点和struct类型很相似)。 static修饰的静态变量不占用内容,原因是编译器将其放在全局变量区。 (二)类内部的成员函数: 普通函数不占用内存。 虚函数要占用4个字节,用来指定虚函数的虚拟函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数是没有关系的 5、子类 子类所占内存大小是父类+自身成员变量的值。特别注意的是,子类与父类共享同一个虚函数指针,因此当子类新声明一个虚函数时,不必再保存虚函数表指针入口。 来源: https://www.cnblogs.com/mazhimazhi/p