
C内存对齐与布局优化内存对齐是编译器为了提高内存访问效率而采用的策略。理解内存对齐规则对于优化结构体大小和提高程序性能至关重要。结构体的内存布局受对齐规则影响可能包含填充字节。#include#includestruct Unaligned {char a;int b;char c;};struct Aligned {int b;char a;char c;};void alignment_basics() {std::cout Unaligned size: sizeof(Unaligned) \n;std::cout Aligned size: sizeof(Aligned) \n;Unaligned u;std::cout Offset of a: offsetof(Unaligned, a) \n;std::cout Offset of b: offsetof(Unaligned, b) \n;std::cout Offset of c: offsetof(Unaligned, c) \n;}alignas关键字可以指定变量或类型的对齐要求。struct alignas(16) AlignedStruct {int x;int y;};void alignas_example() {AlignedStruct s;std::cout AlignedStruct size: sizeof(AlignedStruct) \n;std::cout AlignedStruct alignment: alignof(AlignedStruct) \n;std::cout Address: s \n;}#pragma pack可以控制结构体的对齐方式。#pragma pack(push, 1)struct Packed {char a;int b;char c;};#pragma pack(pop)void pragma_pack_example() {std::cout Packed size: sizeof(Packed) \n;Packed p;std::cout Offset of a: offsetof(Packed, a) \n;std::cout Offset of b: offsetof(Packed, b) \n;std::cout Offset of c: offsetof(Packed, c) \n;}缓存行对齐可以避免伪共享问题。struct alignas(64) CacheAligned {int value;};struct PaddedCounter {alignas(64) int counter1;alignas(64) int counter2;};void cache_line_alignment() {PaddedCounter pc;std::cout Size: sizeof(PaddedCounter) \n;std::cout Offset of counter1: offsetof(PaddedCounter, counter1) \n;std::cout Offset of counter2: offsetof(PaddedCounter, counter2) \n;}位域可以节省内存但可能影响性能。struct Flags {unsigned int flag1 : 1;unsigned int flag2 : 1;unsigned int flag3 : 1;unsigned int value : 29;};void bitfield_example() {std::cout Flags size: sizeof(Flags) \n;Flags f;f.flag1 1;f.flag2 0;f.flag3 1;f.value 12345;std::cout flag1: f.flag1 \n;std::cout value: f.value \n;}联合体的所有成员共享同一块内存。union Data {int i;float f;char c[4];};void union_example() {std::cout Union size: sizeof(Data) \n;Data d;d.i 0x12345678;std::cout As int: std::hex d.i \n;std::cout As bytes: ;for (int i 0; i 4; i) {std::cout std::hex (int)(unsigned char)d.c[i] ;}std::cout \n;}内存布局优化可以减少结构体大小。struct Optimized {double d;int i1;int i2;char c1;char c2;short s;};void layout_optimization() {std::cout Optimized size: sizeof(Optimized) \n;}理解内存对齐对于编写高效的C代码至关重要特别是在性能敏感的应用中。