#include <stdio.h>
#pragma pack(push, 1)
struct s1
{
char a; // 1
int b; // 4
float c; // 4
};
#pragma pack(pop)
struct s2
{
char a; // 1 + 3
int b; // 4
float c; // 4
};
class s3
{
public:
char a; // 1 + 3
int b; // 4
float c; // 4
};
class s4
{
public:
// VTABLE: 4
char a; // 1 + 3
int b; // 4
float c; // 4
virtual void print_name() { printf("s4\n"); }
};
class s5 : public s4
{
public:
virtual void print_name() { printf("s5\n"); }
};
class s6 : public s4
{
public:
virtual void print_name() { printf("s6\n"); }
};
int main(void)
{
printf("sizeof(s1) = %d\n", sizeof(s1));
printf("sizeof(s2) = %d\n", sizeof(s2));
printf("sizeof(s3) = %d\n", sizeof(s3));
printf("sizeof(s4) = %d\n", sizeof(s4));
printf("sizeof(s5) = %d\n", sizeof(s5));
printf("sizeof(s6) = %d\n", sizeof(s6));
// zeby przypadkiem kompilator nie zoptymalizowal
int a;
scanf("%d", &a);
s4* s;
switch (a)
{
case 0: s = new s5; break;
case 1: s = new s6; break;
default: s = new s4;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojcHJhZ21hIHBhY2socHVzaCwgMSkKc3RydWN0IHMxCnsKICBjaGFyIGE7IC8vIDEKICBpbnQgYjsgLy8gNAogIGZsb2F0IGM7IC8vIDQKfTsKI3ByYWdtYSBwYWNrKHBvcCkKCnN0cnVjdCBzMgp7CiAgY2hhciBhOyAvLyAxICsgMwogIGludCBiOyAvLyA0CiAgZmxvYXQgYzsgLy8gNAp9OwoKY2xhc3MgczMKewpwdWJsaWM6CiAgY2hhciBhOyAvLyAxICsgMwogIGludCBiOyAvLyA0CiAgZmxvYXQgYzsgLy8gNAp9OwoKY2xhc3MgczQKewpwdWJsaWM6CiAgLy8gVlRBQkxFOiA0CiAgY2hhciBhOyAvLyAxICsgMwogIGludCBiOyAvLyA0CiAgZmxvYXQgYzsgLy8gNAogIHZpcnR1YWwgdm9pZCBwcmludF9uYW1lKCkgeyBwcmludGYoInM0XG4iKTsgIH0KfTsKCmNsYXNzIHM1IDogcHVibGljIHM0CnsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBwcmludF9uYW1lKCkgeyBwcmludGYoInM1XG4iKTsgfQp9OwoKY2xhc3MgczYgOiBwdWJsaWMgczQKewpwdWJsaWM6CiAgdmlydHVhbCB2b2lkIHByaW50X25hbWUoKSB7IHByaW50ZigiczZcbiIpOyB9Cn07CgppbnQgbWFpbih2b2lkKQp7CglwcmludGYoInNpemVvZihzMSkgPSAlZFxuIiwgc2l6ZW9mKHMxKSk7CglwcmludGYoInNpemVvZihzMikgPSAlZFxuIiwgc2l6ZW9mKHMyKSk7CglwcmludGYoInNpemVvZihzMykgPSAlZFxuIiwgc2l6ZW9mKHMzKSk7CglwcmludGYoInNpemVvZihzNCkgPSAlZFxuIiwgc2l6ZW9mKHM0KSk7CglwcmludGYoInNpemVvZihzNSkgPSAlZFxuIiwgc2l6ZW9mKHM1KSk7CglwcmludGYoInNpemVvZihzNikgPSAlZFxuIiwgc2l6ZW9mKHM2KSk7CgkKCS8vIHplYnkgcHJ6eXBhZGtpZW0ga29tcGlsYXRvciBuaWUgem9wdHltYWxpem93YWwKCWludCBhOwoJc2NhbmYoIiVkIiwgJmEpOwoJczQqIHM7Cglzd2l0Y2ggKGEpCgl7CgkJY2FzZSAwOiBzID0gbmV3IHM1OyBicmVhazsKCQljYXNlIDE6IHMgPSBuZXcgczY7IGJyZWFrOwoJCWRlZmF1bHQ6IHMgPSBuZXcgczQ7Cgl9CgkKCXJldHVybiAwOwp9Cg==