C++ struct記憶體配置大小

來源:互聯網
上載者:User

C++ struct記憶體配置大小<br />一 原則:<br />1 所有欄位在記憶體中出現順序與聲明順序一致 (理論上,譯器可以隨便放置各個欄位)<br />2 由於效能原因,大多數編譯器實際上會將struct 的各個欄位對齊放置在合適的記憶體邊界。具體細節隨著語言編譯器和CPU的不同而不同。在80X86體系中,符合Intel應用二進位介面(ABI Application Bianry Interface)的編譯器會將單位元組對象分配在struct中任意位移量處,字分配在字位移量處,而雙字或者更大的對象則分配在雙字邊界。<br />3 大多數編譯器會確保整個記錄的長度是2、4或者8個位元組的整數倍,他們通過在記錄的末尾添加補齊位元組以增加struct長度來做到這一點。編譯器之所以要補齊struct的大小,是為了要確保記錄的長度是記錄中的最大純量(Scalar)對象大小或者CPU的最優對齊大小的整數倍。<br />4 通常編譯器會提供一個選項,讓你可以在全域上禁止這一功能。很多編譯器還提供了pragma後者packed等關鍵字來讓你能夠逐struct地關掉欄位對齊(優點是節省記憶體,缺點是增加了時間開銷)<br />二 C++資料類型大小<br />char 1Byte<br />short 2Byte<br />int 4Byte<br />long long 8Byte<br />string 32Byte(Null 字元串,STL建構函式暫且將其大小置為32Byte)<br />三 VS2008中struct大小遵循的原則:<br />0 欄位在記憶體中出現順序與聲明順序一致(符合第1條)<br />1 struct的長度是最長純量的整數倍(符合第3條)<br />2 struct大小符合ABI規則(符合第2條)<br />四 例子<br />string t;<br />long long l;<br />int i;<br />char c;<br />這個大小為48=32+8+4+4<br />long long l;<br />string t;<br />int i;<br />char c;<br />這個大小為48=8+32+4+4<br />int i;<br />long long l;<br />string t;<br />char c;<br />這個大小為56=8+8+32+8<br />char c;<br />short s;<br />int i;<br />long long l;<br />string t;<br />這個大小為 48=2+2+4+8+32<br /> short a;<br />long long b;<br />char c;<br />short d;<br />int e;<br />short f;<br />long long g;<br />這個真實大小為 2+8+1+2+4+2+8 實際是8+8+2+2+4+8+8=40;<br />五 Reference<br />《編程卓越之道 第一卷 深入理解電腦》Randall Hyde 張菲譯</p><p> 呂曉磊<br /> 2010-3-21<br />

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.