实验环境:
win7 32位 vc++6.0
实验代码:
#include <iostream>
using namespace std;
struct A
{
bool b;
char c;
short s;
int i;
long l;
float f;
double d;
//extra
bool e;
};
#pragma pack(push)
#pragma pack(1)
struct B
{
bool b;
char c;
short s;
int i;
long l;
float f;
double d;
// extra
bool e;
};
struct C
{
bool b;
double d;
float f;
long l;
int i;
short s;
char c;
};
#pragma pack(pop)
struct D
{
double d;
float f;
long l;
int i;
short s;
char c;
bool b;
};
int main(int argc, char* argv[])
{
cout << "sizeof(short): " << sizeof(short) << endl;
cout << "sizeof(int): " << sizeof(int) << endl;
cout << "sizeof(long): " << sizeof(long) << endl;
cout << "sizeof(float): " << sizeof(float) << endl;
cout << "sizeof(double): " << sizeof(double) << endl;
cout << "sizeof(char): " << sizeof(char) << endl;
cout << "sizeof(bool): " << sizeof(bool) << endl;
cout << "==================================" << endl;
cout << "sizeof(A): " << sizeof(A) << endl;
cout << "sizeof(B): " << sizeof(B) << endl;
cout << "sizeof(C): " << sizeof(C) << endl;
cout << "sizeof(D): " << sizeof(D) << endl;
A array_A[10];
B array_B[10];
cout << "sizeof(array_A):" << sizeof(array_A) << endl;
cout << "sizeof(array_B):" << sizeof(array_B) << endl;
return 0;
}
实验结果:
实验要点:
1.可以通过#pragma pack(n)来设置struct以n字节对齐;
2.可以通过#pragma pack(push)与#pragma pack(pop)来设置struct字节对齐的有效范围;
3.通过array_B的实验,再次验证了数组是连续存储;
4.实验的基本数据结构中并没有包括C99中的long long