fork download
  1. #include <iostream>
  2.  
  3. //#pragma pack(push, 1)
  4. struct alignas(16) Test
  5. {
  6. alignas(4) int32_t a; // 4 bytes
  7. alignas(4) int8_t b; // 4 byte
  8. alignas(4) int8_t c; // 4 byte
  9. };
  10. //#pragma pack(pop)
  11.  
  12. //#pragma pack(push, 1)
  13. struct Test2
  14. {
  15. alignas(4) int32_t a; // 4 bytes
  16. alignas(4) int8_t b; // 4 byte
  17. alignas(4) int8_t c; // 4 byte
  18. };
  19. //#pragma pack(pop)
  20.  
  21. //#pragma pack(push, 1)
  22. struct Test3
  23. {
  24. int32_t a; // 4 bytes
  25. int8_t b; // 1 byte
  26. int8_t c; // 1 byte
  27. };
  28. //#pragma pack(pop)
  29.  
  30. int main() {
  31. std::cout<<"Test 1:\n";
  32. std::cout<<(sizeof(Test))<<"\n";
  33. std::cout<<(alignof(Test))<<"\n";
  34.  
  35. std::cout<<"a: "<<offsetof(Test, a)<<"\n";
  36. std::cout<<"b: "<<offsetof(Test, b)<<"\n";
  37. std::cout<<"c: "<<offsetof(Test, c)<<"\n";
  38.  
  39. std::cout<<"------\n";
  40. std::cout<<"Test 2:\n";
  41.  
  42. std::cout<<(sizeof(Test2))<<"\n";
  43. std::cout<<(alignof(Test2))<<"\n";
  44.  
  45. std::cout<<"a: "<<offsetof(Test2, a)<<"\n";
  46. std::cout<<"b: "<<offsetof(Test2, b)<<"\n";
  47. std::cout<<"c: "<<offsetof(Test2, c)<<"\n";
  48.  
  49. std::cout<<"------\n";
  50. std::cout<<"Test 3:\n";
  51.  
  52. std::cout<<(sizeof(Test3))<<"\n";
  53. std::cout<<(alignof(Test3))<<"\n";
  54.  
  55. std::cout<<"a: "<<offsetof(Test3, a)<<"\n";
  56. std::cout<<"b: "<<offsetof(Test3, b)<<"\n";
  57. std::cout<<"c: "<<offsetof(Test3, c)<<"\n";
  58. return 0;
  59. }
Success #stdin #stdout 0.01s 5516KB
stdin
Standard input is empty
stdout
Test 1:
16
16
a: 0
b: 4
c: 8
------
Test 2:
12
4
a: 0
b: 4
c: 8
------
Test 3:
8
4
a: 0
b: 4
c: 5