概述
对齐访问就是当我们定义了一个2字节的变量,编译器可能会给我们分配4个字节,另外2个字节被闲置。对齐访问与非对齐访问是编译器对效率与资源权衡后的结果。非对齐访问物理内存是支持的,但是效率低,对齐访问效率高,所以编译器会使用对齐访问。
非对齐访问过程
第一步:读涉及内存的第一个字节,
第二步:读涉及内存的第二个字节;
第三步:清除第一字节的无关位,
第四部:清除清除第二字节的无关位,
第5步:将第1字节与第二字节组合。所以效率极低。
本文介绍了C语言中的内存对齐概念,包括非对齐访问的低效率过程和对齐访问的优势。对齐方法遵循各数据类型自身的对齐规则,如char、short和int的字节对齐。可以通过#pragma pack指定对齐,或者使用__attribute__ ((packed))取消对齐。还详细解释了offsetof宏用于计算结构体成员相对于起始地址的偏移,以及如何获取结构体的起始地址。
对齐访问就是当我们定义了一个2字节的变量,编译器可能会给我们分配4个字节,另外2个字节被闲置。对齐访问与非对齐访问是编译器对效率与资源权衡后的结果。非对齐访问物理内存是支持的,但是效率低,对齐访问效率高,所以编译器会使用对齐访问。
第一步:读涉及内存的第一个字节,
第二步:读涉及内存的第二个字节;
第三步:清除第一字节的无关位,
第四部:清除清除第二字节的无关位,
第5步:将第1字节与第二字节组合。所以效率极低。
7187
3196
1184

被折叠的 条评论
为什么被折叠?