日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struct的成员对齐

發布時間:2025/3/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struct的成员对齐 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 struct的成員對齊

Intel、微軟等公司曾經出過一道類似的面試題:

#include <iostream.h>

#pragma pack(8)

struct example1

{

short a;

long b;

};

struct example2

{

char c;

example1 struct1;

short e;

};

#pragma pack()

int main(int argc, char* argv[])

{

example2 struct2;

cout << sizeof(example1) << endl;

cout << sizeof(example2) << endl;

cout << (unsigned int)(&struct2.struct1) - (unsigned int)(&struct2) << endl;

return 0;

}

問程序的輸入結果是什么?

答案是:

8 16 4

不明白?還是不明白?下面一一道來:

?

1.1 自然對界

struct 是一種復合數據類型,其構成元素既可以是基本數據類型(如intlongfloat 等)的變量,也可以是一些復合數據類型(如arraystructunion 等)的數據單元。對于結構體,編譯器會自動進行成員變量的對齊,以提高運算效率。缺省情況下,編譯器為結構體的每個成員按其自然對界(natural alignment)條件分配空間。各個成員按照它們被聲明的順序在內存中順序存儲,第一個成員的地址和整個結構的地址相同。

? ? ? 自然對界(natural alignment)即默認對齊方式,是指按結構體的成員中size 最大的成員對齊。

例如:

struct naturalalign

{

char a;

short b;

char c;

};

? ? ? 在上述結構體中,size 最大的是short,其長度為2 字節,因而結構體中的char 成員ac 都以2 為單位對齊,sizeof(naturalalign)的結果等于6

如果改為:

struct naturalalign

{

char a;

int b;

char c;

};

其結果顯然為12

1.2 指定對界

一般地,可以通過下面的方法來改變缺省的對界條件:

· 使用偽指令#pragma pack (n),編譯器將按照n 個字節對齊;

· 使用偽指令#pragma pack (),取消自定義字節對齊方式。

? ? ? 注意:如果#pragma pack (n)中指定的n 大于結構體中最大成員的size,則其不起作用,結構體仍然按照size 最大的成員進行對界。

例如

#pragma pack (n)

struct naturalalign

{

char a;

int b;

char c;

};

#pragma pack ()

? ? ? n 4816 時,其對齊方式均一樣,sizeof(naturalalign)的結果都等于12。而當n 2時,其發揮了作用,使得sizeof(naturalalign)的結果為6

? ? ? VC++ 6.0 編譯器中,我們可以指定其對界方式(見圖1),其操作方式為依次選擇projetct >setting > C/C++菜單,在struct member alignment 中指定你要的對界方式。

? ? ? 1 VC++ 6.0 中指定對界方式

?

?

?

?

? ? ? 另外,通過__attribute((aligned (n)))也可以讓所作用的結構體成員對齊在n 字節邊界上,但是它較少被使用,因而不作詳細講解。

?

1.3 面試題的解答

? ? ? 至此,我們可以對Intel、微軟的面試題進行全面的解答。程序中第2 #pragma pack (8)雖然指定了對界為8,但是由于struct example1 中的成員最大size 4long 變量size 4),故struct example1 仍然按4 字節對界,struct example1 size8,即第18 行的輸出結果;

struct example2 中包含了struct example1,其本身包含的簡單數據成員的最大size 2short變量e),但是因為其包含了struct example1,而struct example1 中的最大成員size 4structexample2 也應以4 對界,#pragma pack (8)中指定的對界對struct example2 也不起作用,故19 行的輸出結果為16

? ? ? 由于struct example2 中的成員以4 為單位對界,故其char 變量c 后應補充3 個空,其后才是成員struct1 的內存空間,20 行的輸出結果為4

?

vb6中字符串的內存分布

http://topic.csdn.net/u/20100305/10/2398150e-ae14-4456-93a8-6abeee6d2b96.html?1173930695

總結

以上是生活随笔為你收集整理的struct的成员对齐的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧美成 | 激情拍拍 | 操操日日 | 成人91免费视频 | 中文字幕人妻熟女在线 | 免费观看一区二区 | 久久天堂av | 黄色一区二区视频 | 九九少妇 | 2022av在线| 欧美日韩免费在线 | 国产精品久久麻豆 | 亚洲天堂av一区二区三区 | 中文字幕一区二区三区人妻在线视频 | 欧美另类色图 | 91精品视频在线 | 超碰超碰超碰超碰 | 日日夜夜狠 | a级黄色小说| 色欲av无码精品一区 | 在线观看免费高清在线观看 | 手机在线看a | 日韩av三区 | 国产av一区二区三区传媒 | 一本一本久久a久久精品综合麻豆 | 美女被草出白浆 | 欧美一区二区三区日韩 | 夜夜狠狠| 17草在线| 青青草久久 | 国产一区二区福利 | 一区二区三区国产在线 | 美女网站黄频 | 都市激情中文字幕 | 亚洲人人插 | 波多野结衣av在线免费观看 | 亚洲一区二区精品在线 | 亚洲黄色网络 | av2018| 免费毛片在线播放 | 中文字幕人妻互换av久久 | 少妇免费直播 | 中文字幕一区二区三区精彩视频 | 日韩av图片 | 奶波霸巨乳一二三区乳 | 日韩色综合 | a级片免费在线观看 | 亚洲一二区 | 四虎音影| 久久亚洲一区 | 欧美精品网站 | 91老师国产黑色丝袜在线 | 看片久久| 日韩av一区二区在线 | 国产日韩精品一区二区 | 亚洲欧美中文日韩在线v日本 | 国产精品99 | 国产又粗又长又大视频 | 一区二区日韩国产 | 国产美女无遮挡永久免费 | 毛片2| 欧美高清一区二区 | 欧美性网址 | 天天撸夜夜操 | 国产粉嫩白浆 | 国产视频在线观看一区 | 国模无码视频一区二区三区 | 精品久久久久久久中文字幕 | 欧美999| 色人天堂| 中文字幕久久av | 国产xxxxx视频| 国产精品久久无码 | 在线色网站 | 中文人妻av久久人妻18 | 女人和拘做爰正片视频 | 亚洲精品成人无码毛片 | 姐姐你真棒插曲快来救救我电影 | 黄色a网站 | 麻豆三级在线观看 | 中文字幕高清视频 | 日韩网红少妇无码视频香港 | 免费黄色在线 | 中文字幕一区二区不卡 | aaaa毛片| 91亚洲精品久久久蜜桃网站 | 欧美亚洲国产一区 | 国产av自拍一区 | 久草三级| 久久久久久电影 | 日本一级免费视频 | 一级特黄肉体裸片 | 午夜国产福利在线 | 欧美草草| 国产人与zoxxxx另类 | 亚洲www| 国产精品秘入口18禁麻豆免会员 | 国产欧美一区二区精品久久久 | 中文字幕日韩欧美一区二区三区 |