内存对齐对于基础类型,如float,double,Int,char 等,它们的大小和内存占用是一致的,而对于结构体'而言,如果我们取得其slzeof的结果,会发现这个值有可能会大于结构体内所有成员大小的总和,这是由于结构体内部成员进行了内存对齐°。为什么要进行内存对齐①内存对齐使数据读取更高效在硬件设计上,数据读取的处理器只能从地址为k的倍数的内存处开始读取数据。这种读取方式相当于将内存分为了多个“块”,假设内存可以从任意位置开始存放的话,数据很可能会被分散到多个“块”中,处理分散在多个块中的数据需要移除曾尾不需要的字节,再进行合并,非常耗时。为了提高数据读取的效率,程序分配的内存井不是连续存储的,而是按首地址为k的倍数的方式存储:这样就可以一次性读取数据,而不需要额外的操作。读取非对齐内存'的过程示例②在某些平台下,不进行内存对齐会崩溃内存对齐的规则定义有效对齐值 (allgnment)为结构体中最宽成员 和编译器/用户指定对齐值 中较小的那个。(1)结构体起始地址为有效对齐值的整数倍(2)结构体总大小为有效对齐值的整数倍(3)结构体第一个成员偏移值'为0,之后成员的偏移值为mln(有效对齐值,自身大小)的整数倍相当于每个成员要进行对齐,并且整个结构体也需要进行对齐。示例structA(13비char ct;char c2;);Int maln())cout
【瓜分奖池】深入 C++内存管理第二章 第5张插图
【瓜分奖池】深入 C++内存管理第二章 第6张插图
【瓜分奖池】深入 C++内存管理第二章 第7张插图
【瓜分奖池】深入 C++内存管理第二章 第8张插图