c、c++在定義變數,數組時的記憶體布局及記憶體位元組對齊

來源:互聯網
上載者:User

本文討論的是在Intel機子上windows系統下的c記憶體配置

示範會更容易懂些。

1,數組元素在記憶體中的順序

也請注意程式順序與記憶體順序的關係

 

int b=10;

       int a[3]={1,2,3};  

       int c=11;

 

 

a的地址跟a[0]的地址一樣,但是

 

指標的加減運算 以所指變數的大小為單位:

int(a+1)-int(a)=4;

int(&a+1)-int(a)=4*3=12;

 

 

2,int包含四個位元組,那麼這四個位元組的順序有時怎樣的呢

 

 

 

int b=0x01020304;

char ch='a';

 

 

注意:變數b的高位在低位元組中,而b的地址所指的就是最低的位元組

我們知道有記憶體位元組對齊這回事兒,變數 ch 就是被對齊了

這樣 int(&b)-int(&ch)=4;

中間那三個位元組是閒置

 

但如果這樣

 

 

 

 

 

 

 

int b=0x01020304;

char ch='a';

char ch1='a';

這時ch1緊靠著ch,也就是在“Not”的位置

 

你可以做這樣一個測試;

struct S{<br /> int i;<br /> char c;<br />};</p><p>void main()<br />{<br /> cout<<sizeof(S)<<endl;<br />}

結果是8;

struct S{<br /> int i;<br /> char c;<br /> char c1;<br />};</p><p>void main()<br />{<br /> cout<<sizeof(S)<<endl;<br />}

結果還是 8;

 

能想到,再加入一個char,或兩個char,結果還是 8

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.