內(nèi)存對齊 在我們的程序中,,數(shù)據(jù)結(jié)構(gòu)還有變量等等都需要占有內(nèi)存,在很多系統(tǒng)中,,它都要求內(nèi)存分配的時(shí)候要對齊,,這樣做的好處就是可以提高訪問內(nèi)存的速度。 1 #include <iostream>
2 using namespace std; 3 4 struct X1 5 { 6 int i;//4個(gè)字節(jié) 7 char c1;//1個(gè)字節(jié) 8 char c2;//1個(gè)字節(jié) 9 }; 10 11 struct X2 12 { 13 char c1;//1個(gè)字節(jié) 14 int i;//4個(gè)字節(jié) 15 char c2;//1個(gè)字節(jié) 16 }; 17 18 struct X3 19 { 20 char c1;//1個(gè)字節(jié) 21 char c2;//1個(gè)字節(jié) 22 int i;//4個(gè)字節(jié) 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
讓我們看看三個(gè)結(jié)構(gòu)在內(nèi)存中的布局:
X2中第一個(gè)類型是Char類型,它占用一個(gè)字節(jié),,所以它首
先排在第一組塊的第一個(gè)格子里面,,第二個(gè)是Int類型,它占用4個(gè)字節(jié),,第一組塊已經(jīng)用掉一格,,還剩3格,,肯定是無法放下第二Int類型的,因?yàn)橐紤]到
對齊,,所以不得不把它放到第二個(gè)組塊,,第三個(gè)類型是Char類型,跟第一個(gè)類似,。所因?yàn)橛袃?nèi)存分塊對齊,,我們的內(nèi)存就不是8個(gè)格子了,而是12個(gè)了,。
關(guān)于X3的說明其實(shí)跟X1是類似的,只不過它把兩個(gè)1個(gè)字節(jié)的放到了前面,,相信看了前面兩種情況的說明這里也是很容易理解的,。 |
|