C语言和C++都有内存对齐,当定义一个结构体时,如果不指定内存对齐方式,则会按照默认的最大元素内存对齐。C++中,内存对齐用编译头指令#pragma pack(N),N代表N个字节对齐。如果N的值为零,则自动恢复原来系统内存对齐。下面是一个实例,按照一个字节内存对齐
void Widget::on_pushButton_2_clicked()
{
#ifndef DE
#define DE
#pragma pack(1)
struct
{
BYTE b1[13];
BYTE *p1;
}st;
qDebug()<< sizeof st;
#endif
#pragma pack(0)
struct
{
BYTE b1[13];
BYTE *p1;
}st1;
qDebug()<< sizeof st1;
}
参考内容:
https://blog.youkuaiyun.com/naibozhuan3744/article/details/96139028(参考:结构体内存对齐原理和实例)
https://blog.youkuaiyun.com/Tristesse_wjw/article/details/78526109(参考:预编译指令)