内存对齐, 大家应该都听说过, 我们直接来看程序:
#include <iostream>
using namespace std;
struct
{
int a;
short b;
}A;
struct
{
short b;
int a;
}B;
struct
{
short b;
short c;
int a;
}C;
struct
{
bool b;
bool c;
int a;
}D;
struct
{
bool c;
int a;
bool b;
}E;
struct
{
double a;
int b;
float c;
char d;
char f;
}F;
int main()
{
cout << sizeof(A) << endl; // 8
cout << sizeof(B) << endl; // 8
cout << sizeof(C) << endl; // 8
cout << sizeof(D) << endl; // 8
cout << sizeof(E) << endl; // 12
cout << sizeof(F) << endl; // 24
return 0;
}
继续看:
#include <iostream>
using namespace std;
#pragma pack(1)
struct
{
int a;
short b;
}A;
struct
{
short b;
int a;
}B;
struct
{
short b;
short c;
int a;
}C;
struct
{
bool b;
bool c;
int a;
}D;
struct
{
bool c;
int a;
bool b;
}E;
struct
{
double a;
int b;
float c;
char d;
char f;
}F;
int main()
{
cout << sizeof(A) << endl; // 6
cout << sizeof(B) << endl; // 6
cout << sizeof(C) << endl; // 8
cout << sizeof(D) << endl; // 6
cout << sizeof(E) << endl; // 6
cout << sizeof(F) << endl; // 18
return 0;
}
继续看:
#include <iostream>
using namespace std;
#pragma pack(2)
struct
{
int a;
short b;
}A;
struct
{
short b;
int a;
}B;
struct
{
short b;
short c;
int a;
}C;
struct
{
bool b;
bool c;
int a;
}D;
struct
{
bool c;
int a;
bool b;
}E;
struct
{
double a;
int b;
float c;
char d;
char f;
}F;
int main()
{
cout << sizeof(A) << endl; // 6
cout << sizeof(B) << endl; // 6
cout << sizeof(C) << endl; // 8
cout << sizeof(D) << endl; // 6
cout << sizeof(E) << endl; // 8
cout << sizeof(F) << endl; // 18
return 0;
}
继续看:
#include <iostream>
using namespace std;
#pragma pack(3)
struct
{
int a;
short b;
}A;
struct
{
short b;
int a;
}B;
struct
{
short b;
short c;
int a;
}C;
struct
{
bool b;
bool c;
int a;
}D;
struct
{
bool c;
int a;
bool b;
}E;
struct
{
double a;
int b;
float c;
char d;
char f;
}F;
int main()
{
cout << sizeof(A) << endl; // 8
cout << sizeof(B) << endl; // 8
cout << sizeof(C) << endl; // 8
cout << sizeof(D) << endl; // 8
cout << sizeof(E) << endl; // 12
cout << sizeof(F) << endl; // 24
return 0;
}
此时, 我们得到 warning C4086: expected pragma parameter to be '1', '2', '4', '8', or '16'
好吧, 消化了上面的程序, 内存对其基本算是入门了。