在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。 1 #include <iostream>
2 using namespace std; 3 4 struct X1 5 { 6 int i;//4个字节 7 char c1;//1个字节 8 char c2;//1个字节 9 }; 10 11 struct X2 12 { 13 char c1;//1个字节 14 int i;//4个字节 15 char c2;//1个字节 16 }; 17 18 struct X3 19 { 20 char c1;//1个字节 21 char c2;//1个字节 22 int i;//4个字节 23 }; 24 int main() 25 { 26 cout<<"long "<<sizeof(long)<<"/n"; 27 cout<<"float "<<sizeof(float)<<"/n"; 28 cout<<"int "<<sizeof(int)<<"/n"; 29 cout<<"char "<<sizeof(char)<<"/n"; 30 31 X1 x1; 32 X2 x2; 33 X3 x3; 34 cout<<"x1 的大小 "<<sizeof(x1)<<"/n"; 35 cout<<"x2 的大小 "<<sizeof(x2)<<"/n"; 36 cout<<"x3 的大小 "<<sizeof(x3)<<"/n"; 37 return 0; 38 } 1 long 4
2 float 4 3 int 4 4 char 1 5 x1 的大小 8 6 x2 的大小 12 7 x3 的大小 8
让我们看看三个结构在内存中的布局:
X2中第一个类型是Char类型,它占用一个字节,所以它首先排在第一组块的第一个格子里面,第二个是Int类型,它占用4个字节,第一组块已经用掉一格,还剩3格,肯定是无法放下第二Int类型的,因为要考虑到对齐,所以不得不把它放到第二个组块,第三个类型是Char类型,跟第一个类似。所因为有内存分块对齐,我们的内存就不是8个格子了,而是12个了。 关于X3的说明其实跟X1是类似的,只不过它把两个1个字节的放到了前面,相信看了前面两种情况的说明这里也是很容易理解的。 |
C++中的内存对齐
2008-08-08 21:47
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.