#include <vector>
#include <iostream>
#include <assert.h>
#include <inttypes.h>
#include <stddef.h>
#include <memory.h>
struct MyStandardLayout {
char mem_a;
int16_t num_1;
int32_t num_2;
int64_t num_3;
char mem_z;
MyStandardLayout()
: mem_a('a')
, num_1(1)
, num_2(2)
, num_3(3)
, mem_z('z')
{ }
void print() const {
std::cout <<
"MySL Obj: " <<
mem_a << " / " <<
num_1 << " / " <<
num_2 << " / " <<
num_3 << " / " <<
mem_z << "\n";
}
};
void ZeroInts(MyStandardLayout* pObj) {
void* const pFirst = static_cast<void*>(&pObj->num_1);
void* const pLast = static_cast<void*>(&pObj->num_3);
const ptrdiff_t delta = static_cast<char*>(pLast) - static_cast<char*>(pFirst);
assert(delta > 0);
std::cout << "delta = " << delta << "\n";
const size_t sizeAll = delta + sizeof(int);
std::cout << "sizeAll = " << sizeAll << "\n";
std::vector<char> buf( sizeAll, 0 );
memcpy(pFirst, &buf[0], sizeAll);
}
int main()
{
MyStandardLayout obj;
obj.print();
ZeroInts(&obj);
obj.print();
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8c3RkZGVmLmg+CiNpbmNsdWRlIDxtZW1vcnkuaD4KCnN0cnVjdCBNeVN0YW5kYXJkTGF5b3V0IHsKCWNoYXIgbWVtX2E7CglpbnQxNl90IG51bV8xOwoJaW50MzJfdCBudW1fMjsKCWludDY0X3QgbnVtXzM7CgljaGFyIG1lbV96OwoKCU15U3RhbmRhcmRMYXlvdXQoKQoJOiBtZW1fYSgnYScpCgksIG51bV8xKDEpCgksIG51bV8yKDIpCgksIG51bV8zKDMpCgksIG1lbV96KCd6JykKCXsgfQoKCXZvaWQgcHJpbnQoKSBjb25zdCB7CgkJc3RkOjpjb3V0IDw8IAoJCQkiTXlTTCBPYmo6ICIgPDwKCQkJbWVtX2EgPDwgIiAvICIgPDwKCQkJbnVtXzEgPDwgIiAvICIgPDwKCQkJbnVtXzIgPDwgIiAvICIgPDwKCQkJbnVtXzMgPDwgIiAvICIgPDwKCQkJbWVtX3ogPDwgIlxuIjsKCX0KfTsKCnZvaWQgWmVyb0ludHMoTXlTdGFuZGFyZExheW91dCogcE9iaikgewoJdm9pZCogY29uc3QgcEZpcnN0ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KCZwT2JqLT5udW1fMSk7Cgl2b2lkKiBjb25zdCBwTGFzdCA9IHN0YXRpY19jYXN0PHZvaWQqPigmcE9iai0+bnVtXzMpOwoKCWNvbnN0IHB0cmRpZmZfdCBkZWx0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihwTGFzdCkgLSBzdGF0aWNfY2FzdDxjaGFyKj4ocEZpcnN0KTsKCWFzc2VydChkZWx0YSA+IDApOwoJc3RkOjpjb3V0IDw8ICJkZWx0YSA9ICAiIDw8IGRlbHRhIDw8ICJcbiI7Cgljb25zdCBzaXplX3Qgc2l6ZUFsbCA9IGRlbHRhICsgc2l6ZW9mKGludCk7CglzdGQ6OmNvdXQgPDwgInNpemVBbGwgPSAgIiA8PCBzaXplQWxsIDw8ICJcbiI7CgoJc3RkOjp2ZWN0b3I8Y2hhcj4gYnVmKCBzaXplQWxsLCAwICk7CgltZW1jcHkocEZpcnN0LCAmYnVmWzBdLCBzaXplQWxsKTsKfQoKaW50IG1haW4oKQp7CglNeVN0YW5kYXJkTGF5b3V0IG9iajsKCW9iai5wcmludCgpOwoJWmVyb0ludHMoJm9iaik7CglvYmoucHJpbnQoKTsKCiAgICByZXR1cm4gMDsKfQoK