fork download
  1. #include <stdio.h>
  2.  
  3. #pragma pack(push, 1)
  4. struct s1
  5. {
  6. char a; // 1
  7. int b; // 4
  8. float c; // 4
  9. };
  10. #pragma pack(pop)
  11.  
  12. struct s2
  13. {
  14. char a; // 1 + 3
  15. int b; // 4
  16. float c; // 4
  17. };
  18.  
  19. class s3
  20. {
  21. public:
  22. char a; // 1 + 3
  23. int b; // 4
  24. float c; // 4
  25. };
  26.  
  27. class s4
  28. {
  29. public:
  30. // VTABLE: 4
  31. char a; // 1 + 3
  32. int b; // 4
  33. float c; // 4
  34. virtual void print_name() { printf("s4\n"); }
  35. };
  36.  
  37. class s5 : public s4
  38. {
  39. public:
  40. virtual void print_name() { printf("s5\n"); }
  41. };
  42.  
  43. class s6 : public s4
  44. {
  45. public:
  46. virtual void print_name() { printf("s6\n"); }
  47. };
  48.  
  49. int main(void)
  50. {
  51. printf("sizeof(s1) = %d\n", sizeof(s1));
  52. printf("sizeof(s2) = %d\n", sizeof(s2));
  53. printf("sizeof(s3) = %d\n", sizeof(s3));
  54. printf("sizeof(s4) = %d\n", sizeof(s4));
  55. printf("sizeof(s5) = %d\n", sizeof(s5));
  56. printf("sizeof(s6) = %d\n", sizeof(s6));
  57.  
  58. // zeby przypadkiem kompilator nie zoptymalizowal
  59. int a;
  60. scanf("%d", &a);
  61. s4* s;
  62. switch (a)
  63. {
  64. case 0: s = new s5; break;
  65. case 1: s = new s6; break;
  66. default: s = new s4;
  67. }
  68.  
  69. return 0;
  70. }
  71.  
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
sizeof(s1) = 9
sizeof(s2) = 12
sizeof(s3) = 12
sizeof(s4) = 16
sizeof(s5) = 16
sizeof(s6) = 16