結構體成員的記憶體對齊

來源:互聯網
上載者:User
#include <iostream>using namespace std;//#pragma pack(1) //使用#pragma pack可以將對齊設定為1/*記憶體對齊的3個準則:1、結構體變數的首地址能夠被其最寬的基本類型成員大小所整除2、結構體每個成員相對於結構體首地址的位移量(offset)都是這個成員大小的整數倍,如有不足則補上3、結構體總大小為結構體最寬的基本類型成員的整數倍*/struct widget1{double d;//sizeof(double)== 8int i;//sizeof(int)== 4short s;//sizeof(short)== 2char c;//sizeof(char)== 1static int count;//count是靜態成員,靜態成員的空間不在類的執行個體中,//而是像全域變數一樣在靜態儲存區,被類共用。};int widget1::count = 0;/*對於widget1:d的位移量為0;i的位移量為8,是sizeof(int)的整數倍,不需補位元組s的位移量為8+4=12,是sizeof(short)的整數倍,不需補位元組c的位移量為8+4+2=14,是sizeof(char)的整數倍,不需補位元組目前的結構體的位元組數為8+4+2+1=15,不是最大基本變數d大小的整數倍,需要補上1位元組,15+1=16所以sizeof(widget1)==16*/struct widget2{int i;//sizeof(int)== 4short s;//sizeof(short)== 2char c;//sizeof(char)== 1double d;//sizeof(double)== 8};/*對於widget2:i的位移量為0s的位移量為4,是sizeof(short)的整數倍,不需補位元組數c的位移量為4+2=6,也不需補位元組數d的位移量為4+2+1=7,但不是sizeof(double)的整數倍,要補位元組數1,所以d的位移量為4+2+1+1(補齊)=8目前結構體的位元組數為4+2+1+1(補齊)+8=16,是最大基本變數d大小的整數倍,不需補齊所以sizeof(widget2)==16*/struct widget3{char c;//sizeof(char)== 1int i;//sizeof(int)== 4short s;//sizeof(short)== 2double d;//sizeof(double)== 8};/*對於widget2:c的位移量為0i的位移量為1(c的大小)+3(補齊)=4s的位移量為1(c的大小)+3(補齊)+4(i的大小)=8d的位移量為1(c的大小)+1(補齊)+4(i的大小)+2(s的大小)+6(補齊)=16目前結構體的大小為1(c的大小)+1(補齊)+4(i的大小)+2(s的大小)+6(補齊)+8(d的大小)=24,不需補齊所以sizeof(widget3)=24*/int main(){cout<<"the size of widget is: "<<sizeof(widget1)<<endl;cout<<"the size of widget is: "<<sizeof(widget2)<<endl;cout<<"the size of widget is: "<<sizeof(widget3)<<endl;system("pause");return 0;}

聯繫我們

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