fork download
  1. #include <stdio.h>
  2.  
  3. // 默认对齐的结构体
  4. struct AlignedStruct {
  5. char a; // 1 字节
  6. int b; // 4 字节(对齐要求 4)
  7. double c; // 8 字节(对齐要求 8)
  8. };
  9.  
  10. // 紧凑对齐(取消填充)
  11. #pragma pack(push, 1)
  12. struct PackedStruct {
  13. char a;
  14. int b;
  15. double c;
  16. };
  17. #pragma pack(pop)
  18.  
  19. int main() {
  20. struct AlignedStruct s1;
  21. struct PackedStruct s2;
  22. printf("Addresses:\n");
  23. printf("s1: %p\ns1.a: %p\ns1.b: %p\ns1.c: %p\n",
  24. &s1, &s1.a, &s1.b, &s1.c);
  25. printf("s2: %p\ns2.a: %p\ns2.b: %p\ns2.c: %p\n",
  26. &s2, &s2.a, &s2.b, &s2.c);
  27. return 0;
  28. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Addresses:
s1: 0x7ffebdca1be0
s1.a: 0x7ffebdca1be0
s1.b: 0x7ffebdca1be4
s1.c: 0x7ffebdca1be8
s2: 0x7ffebdca1bd3
s2.a: 0x7ffebdca1bd3
s2.b: 0x7ffebdca1bd4
s2.c: 0x7ffebdca1bd8