#include <iostream>
using namespace std;
struct some_struct
{
double m;
};
static_assert(sizeof(some_struct) == sizeof(std::int64_t));
static_assert(alignof(some_struct) == alignof(std::int64_t));
char buf[] = {
// some prefix
0x1, 0x2, 0x3,
// now struct data
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08
};
int main() {
some_struct* s = reinterpret_cast<some_struct*>(buf + 3);
// now let's check alignment
std::cout << reinterpret_cast<std::uintptr_t>(s) % alignof(some_struct);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHNvbWVfc3RydWN0CnsKIGRvdWJsZSBtOwp9OwoKc3RhdGljX2Fzc2VydChzaXplb2Yoc29tZV9zdHJ1Y3QpID09IHNpemVvZihzdGQ6OmludDY0X3QpKTsKc3RhdGljX2Fzc2VydChhbGlnbm9mKHNvbWVfc3RydWN0KSA9PSBhbGlnbm9mKHN0ZDo6aW50NjRfdCkpOwoKY2hhciBidWZbXSA9IHsKCS8vIHNvbWUgcHJlZml4CgkweDEsIDB4MiwgMHgzLAoJLy8gbm93IHN0cnVjdCBkYXRhCgkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4Cn07CgppbnQgbWFpbigpIHsKCXNvbWVfc3RydWN0KiBzID0gcmVpbnRlcnByZXRfY2FzdDxzb21lX3N0cnVjdCo+KGJ1ZiArIDMpOwoJLy8gbm93IGxldCdzIGNoZWNrIGFsaWdubWVudAoJc3RkOjpjb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjp1aW50cHRyX3Q+KHMpICUgYWxpZ25vZihzb21lX3N0cnVjdCk7CglyZXR1cm4gMDsKfQ==