#include <iostream>
#include <cstdint>
struct One {
int a = 1;
};
struct Two {
int a = 2;
int b = 2;
};
struct Three {
int a = 3;
int b = 3;
int c = 3;
};
int main() {
int size = 3;
auto a = (One*)std::malloc(size * sizeof(One));
auto b = (Two*)std::malloc(size * sizeof(Two));
auto c = (Three*)std::malloc(size * sizeof(Three));
auto aEndAddress = reinterpret_cast<uintptr_t>(a + size - 1);
auto bEndAddress = reinterpret_cast<uintptr_t>(b + size - 1);
auto cEndAddress = reinterpret_cast<uintptr_t>(c + size - 1);
auto aBaseAddress = reinterpret_cast<uintptr_t>(a + 0);
auto bBaseAddress = reinterpret_cast<uintptr_t>(b + 0);
auto cBaseAddress = reinterpret_cast<uintptr_t>(c + 0);
auto a1 = aEndAddress - aBaseAddress;
auto b2 = bEndAddress - bBaseAddress;
auto c3 = cEndAddress - cBaseAddress;
std::cout << "a-diff: " << a1 << ", b-diff: " << b2 << ", c-diff: " << c3 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KCnN0cnVjdCBPbmUgewoJaW50IGEgPSAxOwp9OwoKc3RydWN0IFR3byB7CglpbnQgYSA9IDI7CglpbnQgYiA9IDI7Cn07CgpzdHJ1Y3QgVGhyZWUgewoJaW50IGEgPSAzOwoJaW50IGIgPSAzOwoJaW50IGMgPSAzOwp9OwoKaW50IG1haW4oKSB7CglpbnQgc2l6ZSA9IDM7CglhdXRvIGEgPSAoT25lKilzdGQ6Om1hbGxvYyhzaXplICogc2l6ZW9mKE9uZSkpOwoJYXV0byBiID0gKFR3byopc3RkOjptYWxsb2Moc2l6ZSAqIHNpemVvZihUd28pKTsKCWF1dG8gYyA9IChUaHJlZSopc3RkOjptYWxsb2Moc2l6ZSAqIHNpemVvZihUaHJlZSkpOwoJCglhdXRvIGFFbmRBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGEgKyBzaXplIC0gMSk7CglhdXRvIGJFbmRBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGIgKyBzaXplIC0gMSk7CglhdXRvIGNFbmRBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGMgKyBzaXplIC0gMSk7CglhdXRvIGFCYXNlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhICsgMCk7CglhdXRvIGJCYXNlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiICsgMCk7CglhdXRvIGNCYXNlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjICsgMCk7CglhdXRvIGExID0gYUVuZEFkZHJlc3MgLSBhQmFzZUFkZHJlc3M7CglhdXRvIGIyID0gYkVuZEFkZHJlc3MgLSBiQmFzZUFkZHJlc3M7CglhdXRvIGMzID0gY0VuZEFkZHJlc3MgLSBjQmFzZUFkZHJlc3M7CgkKCXN0ZDo6Y291dCA8PCAiYS1kaWZmOiAiIDw8IGExIDw8ICIsIGItZGlmZjogIiA8PCBiMiA8PCAiLCBjLWRpZmY6ICIgPDwgYzMgPDwgc3RkOjplbmRsOwoJCglyZXR1cm4gMDsKfQ==