结构体对齐是C/C++编程中特别重要的一个基础知识,尤其在我们编写的程序,使用在不同的系统(甚至跨平台)的时候,如果结构体默认的对齐方式不一致,而我们在代码中又没有考虑到兼容的问题,极有可能会引发一些内存相关的问题,it‘s so bad。所以,最好的做法就是设定结构体数据对齐。
#include <iostream>
using namespace std;
#pragma pack(push) // 保存对齐状态
#pragma pack(4) // 设定4字节对齐
struct test
{
// 指针变量的所占内存的大小由编译器决定:
// 通常16编译器上占2字节,32编译器上位占4字节,64位占8字节
char* name; // 8
char ch; // 1
double d; // 8
int i; // 4
};
#pragma pack(pop) // 恢复对齐状态
int main()
{
cout << sizeof(test) << endl;
return 0;
}