C++类的内存布局
- C++的非静态数据成员都存放在数据段,类的首地址即类的第一个数据成员的地址;
- 下面代码尝试修改dValue为3.14,使用指针修改类的成员变量时,需要注意该类的对齐方式;
- 如第4条代码为4字节对齐,修改dValue的值时需要在int的基础上加上偏移量1;如果是8字节对齐,则代码是
*((double*)&tstObj + 1) = 3.14;
- 完整存取代码
#pragma pack(4)
class Tst
{
private:
int iValue;
double dValue;
float fValue;
};
Tst tstObj;
*(double*)((int*)&tstObj + 1) = 3.14;
*((float*)&tstObj + 3) = 1.57f;