#include <iostream>
//#pragma pack(push, 1)
struct alignas(16) Test
{
alignas(4) int32_t a; // 4 bytes
alignas(4) int8_t b; // 4 byte
alignas(4) int8_t c; // 4 byte
};
//#pragma pack(pop)
//#pragma pack(push, 1)
struct Test2
{
alignas(4) int32_t a; // 4 bytes
alignas(4) int8_t b; // 4 byte
alignas(4) int8_t c; // 4 byte
};
//#pragma pack(pop)
//#pragma pack(push, 1)
struct Test3
{
int32_t a; // 4 bytes
int8_t b; // 1 byte
int8_t c; // 1 byte
};
//#pragma pack(pop)
int main() {
std::cout<<"Test 1:\n";
std::cout<<(sizeof(Test))<<"\n";
std::cout<<(alignof(Test))<<"\n";
std::cout<<"a: "<<offsetof(Test, a)<<"\n";
std::cout<<"b: "<<offsetof(Test, b)<<"\n";
std::cout<<"c: "<<offsetof(Test, c)<<"\n";
std::cout<<"------\n";
std::cout<<"Test 2:\n";
std::cout<<(sizeof(Test2))<<"\n";
std::cout<<(alignof(Test2))<<"\n";
std::cout<<"a: "<<offsetof(Test2, a)<<"\n";
std::cout<<"b: "<<offsetof(Test2, b)<<"\n";
std::cout<<"c: "<<offsetof(Test2, c)<<"\n";
std::cout<<"------\n";
std::cout<<"Test 3:\n";
std::cout<<(sizeof(Test3))<<"\n";
std::cout<<(alignof(Test3))<<"\n";
std::cout<<"a: "<<offsetof(Test3, a)<<"\n";
std::cout<<"b: "<<offsetof(Test3, b)<<"\n";
std::cout<<"c: "<<offsetof(Test3, c)<<"\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLy8jcHJhZ21hIHBhY2socHVzaCwgMSkKc3RydWN0IGFsaWduYXMoMTYpIFRlc3QKewogICAgYWxpZ25hcyg0KSBpbnQzMl90IGE7IC8vIDQgYnl0ZXMKICAgIGFsaWduYXMoNCkgaW50OF90IGI7IC8vIDQgYnl0ZQogICAgYWxpZ25hcyg0KSBpbnQ4X3QgYzsgLy8gNCBieXRlCn07Ci8vI3ByYWdtYSBwYWNrKHBvcCkKCi8vI3ByYWdtYSBwYWNrKHB1c2gsIDEpCnN0cnVjdCBUZXN0Mgp7CiAgICBhbGlnbmFzKDQpIGludDMyX3QgYTsgLy8gNCBieXRlcwogICAgYWxpZ25hcyg0KSBpbnQ4X3QgYjsgLy8gNCBieXRlCiAgICBhbGlnbmFzKDQpIGludDhfdCBjOyAvLyA0IGJ5dGUKfTsKLy8jcHJhZ21hIHBhY2socG9wKQoKLy8jcHJhZ21hIHBhY2socHVzaCwgMSkKc3RydWN0IFRlc3QzCnsKICAgIGludDMyX3QgYTsgLy8gNCBieXRlcwogICAgaW50OF90IGI7IC8vIDEgYnl0ZQogICAgaW50OF90IGM7IC8vIDEgYnl0ZQp9OwovLyNwcmFnbWEgcGFjayhwb3ApCgppbnQgbWFpbigpIHsKCXN0ZDo6Y291dDw8IlRlc3QgMTpcbiI7CglzdGQ6OmNvdXQ8PChzaXplb2YoVGVzdCkpPDwiXG4iOwoJc3RkOjpjb3V0PDwoYWxpZ25vZihUZXN0KSk8PCJcbiI7CgkKCXN0ZDo6Y291dDw8ImE6ICI8PG9mZnNldG9mKFRlc3QsIGEpPDwiXG4iOwoJc3RkOjpjb3V0PDwiYjogIjw8b2Zmc2V0b2YoVGVzdCwgYik8PCJcbiI7CglzdGQ6OmNvdXQ8PCJjOiAiPDxvZmZzZXRvZihUZXN0LCBjKTw8IlxuIjsKCQoJc3RkOjpjb3V0PDwiLS0tLS0tXG4iOwoJc3RkOjpjb3V0PDwiVGVzdCAyOlxuIjsKCQoJc3RkOjpjb3V0PDwoc2l6ZW9mKFRlc3QyKSk8PCJcbiI7CglzdGQ6OmNvdXQ8PChhbGlnbm9mKFRlc3QyKSk8PCJcbiI7CgkKCXN0ZDo6Y291dDw8ImE6ICI8PG9mZnNldG9mKFRlc3QyLCBhKTw8IlxuIjsKCXN0ZDo6Y291dDw8ImI6ICI8PG9mZnNldG9mKFRlc3QyLCBiKTw8IlxuIjsKCXN0ZDo6Y291dDw8ImM6ICI8PG9mZnNldG9mKFRlc3QyLCBjKTw8IlxuIjsKCQoJc3RkOjpjb3V0PDwiLS0tLS0tXG4iOwoJc3RkOjpjb3V0PDwiVGVzdCAzOlxuIjsKCQoJc3RkOjpjb3V0PDwoc2l6ZW9mKFRlc3QzKSk8PCJcbiI7CglzdGQ6OmNvdXQ8PChhbGlnbm9mKFRlc3QzKSk8PCJcbiI7CgkKCXN0ZDo6Y291dDw8ImE6ICI8PG9mZnNldG9mKFRlc3QzLCBhKTw8IlxuIjsKCXN0ZDo6Y291dDw8ImI6ICI8PG9mZnNldG9mKFRlc3QzLCBiKTw8IlxuIjsKCXN0ZDo6Y291dDw8ImM6ICI8PG9mZnNldG9mKFRlc3QzLCBjKTw8IlxuIjsKCXJldHVybiAwOwp9