变量定义的排列顺序:
#include <iostream>
struct Alignment {
double char8;
int char4;
short char2;
char char1;
};
struct Casualness {
int char4;
double char8;
short char2;
char char1;
};
#pragma pack(push)
#pragma pack( 1 )
struct Appoint
{
int char4;
double char8;
short char2;
char char1;
};
#pragma pack(pop)
int main()
{
Alignment *alignment = NULL;
Casualness *casualness = NULL;
Appoint *appoint = NULL;
std::cout << "开辟内存!\n";
std::cout << "Alignment size=" << sizeof(Alignment) << "\n";
std::cout << "Casualness size=" << sizeof(Casualness) << "\n";
std::cout << "Appoint size=" << sizeof(Appoint) << "\n";
std::cout << "\n栈地址偏移计算!\n";
std::cout << "Alignment 偏移=" << (int)&alignment->char1 - (int)&alignment->char8 << "\n";
std::cout << "Casualness 偏移=" << (int)&casualness->char1 - (int)&casualness->char4 << "\n";
std::cout << "Appoint 偏移=" << (int)&appoint->char1 - (int)&appoint->char4 << "\n";
std::cout << ".....";
}
MyStruct1的类型排列自动加了8个字节的内存空间进行对齐。(排序规则->重大到小)