在我們的程序中,數據結構還有變量等等都需要佔有內存,在很多系統中,它都要求內存分配的時候要對齊,這樣做的好處就是可以提高訪問內存的速度。 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.