字节对齐详解
字节对齐详解.txt男人的话就像老太太的牙齿,有多少是真的,~问:你喜欢我哪一点,答:我喜欢你离我远一点~执子之手,方知子丑,泪流满面,子不走我走。诸葛亮出山前,也没带过兵~凭啥我就要工作
,瀛楄妭瀵归綈璇,В - jack-wang - C++鍗氬 jack-wang
C++鍗氬 棣栭〉 鏂伴殢绗?鑱旂郴 鑱氬悎 绠,悊
闅忕瑪-107 璇勮-17 鏂囩珷-0 trackbacks-0 瀛楄妭瀵归綈璇,В
涓?.浠?涔堟槸瀛楄妭瀵归綈,涓轰粈涔堣瀵归綈?
鐜颁唬璁,畻鏈轰腑鍐呭瓨绌洪棿閮芥槸鎸夌収byte鍒掑垎鐨勶紝浠庣悊璁轰笂璁蹭技涔庡浠讳綍绫诲瀷鐨勫彉閲忕殑璁块棶鍙互浠庝换浣曞湴鍧?寮?濮嬶紝浣嗗疄闄呮儏鍐垫槸鍦ㄨ闂壒瀹氱被鍨嬪彉閲忕殑鏃跺?欑粡甯稿湪鐗?
瀹氱殑鍐呭瓨鍦板潃璁块棶锛岃繖灏遍渶瑕佸悇绉嶇被鍨嬫暟鎹寜鐓т竴瀹氱殑瑙勫垯鍦ㄧ?闂翠笂鎺掑垪锛岃?屼笉鏄『搴忕殑涓?涓帴涓?涓殑鎺掓斁锛岃繖灏辨槸瀵归綈銆?
‖浠跺钩鍙板瀛樺偍绌洪棿鐨勫鐞嗕笂鏈夊 瀵归綈鐨勪綔鐢ㄥ拰鍘熷洜锛氬悇涓
緢澶х殑涓嶅悓銆備竴浜涘钩鍙板鏌愪簺鐗瑰畾绫诲瀷鐨勬暟鎹彧鑳戒粠鏌愪簺鐗瑰畾鍦板潃寮?濮嬪瓨鍙栥?傛瘮濡傛湁浜涙灦鏋勭殑CPU鍦ㄨ闂?
涓?涓病鏈夎繘琛屽榻愮殑鍙橀噺鐨勬椂鍊欎細鍙戠敓閿欒,閭,箞鍦ㄨ繖绉嶆灦鏋勪笅缂栫?蹇呴』淇濊瘉瀛楄妭瀵归綈.鍏朵粬骞冲彴鍙兘娌?湁杩欑鎯呭喌锛屼絾鏄渶甯歌鐨勬槸濡傛灉涓嶆寜鐓ч?傚悎鍏跺钩鍙拌姹傚
鏁版嵁瀛樻斁杩涜瀵归綈锛屼細鍦ㄥ瓨鍙栨晥鐜囦笂甯,潵鎹熷け銆傛瘮濡傛湁浜涘钩鍙版瘡娆?閮芥槸浠庡伓鍦板潃寮?濮嬶紝濡傛灉涓?涓猧nt鍨嬶紙鍋囪涓?2浣嶇郴缁燂級濡傛灉瀛樻斁鍦ㄥ伓鍦板潃寮?濮嬬殑鍦版柟锛岄偅
涔堜竴涓鍛ㄦ湡灏卞彲浠ヨ鍑鸿繖32bit锛岃?屽鏋滃瓨鏀惧湪濂囧湴鍧?寮?濮嬬
殑鍦版柟锛屽氨闇?瑕?涓鍛ㄦ湡锛屽苟瀵逛袱娆?鍑虹殑缁撴灉鐨勯珮浣庡瓧鑺傝繘
琛屾嫾鍑戞墠鑳藉緱鍒拌32bit鏁?
鎹?傛樉鐒跺湪璇诲彇鏁堢巼涓婁笅闄嶅緢澶氥??
浜?瀛楄妭瀵归綈瀵圭?搴忕殑褰卞搷:
鍏堣鎴戜滑鐪嬪嚑涓緥瀛愬惂(32bit,x86鐜,gcc缂栬瘧鍣?: 璁剧粨鏋勪綋濡備笅瀹氫箟锛?
struct A
{
int a;
char b;
short c;
};
struct B
{
char b;
int a;
short c;
};
鐜板湪宸茬煡32浣嶆満鍣ㄤ笂鍚勭鏁版嵁绫诲瀷鐨勯暱搴,涓? char:1(鏈夌鍙锋棤绗,彿鍚?
short:2(鏈夌鍙锋棤绗,彿鍚?
int:4(鏈夌鍙锋棤绗,彿鍚?
long:4(鏈夌鍙锋棤绗,彿鍚?
float:4 double:8
閭,箞涓婇潰涓や釜缁撴瀯澶у皬濡備綍鍛?
缁撴灉鏄?
sizeof(strcut A)鍊间负8
sizeof(struct B)鐨勫?煎嵈鏄?2
缁撴瀯浣揂涓寘鍚簡4瀛楄妭闀垮害鐨刬nt涓?涓紝1瀛楄妭闀垮害鐨刢har涓?涓
拰2瀛楄妭闀垮害鐨剆hort鍨嬫暟鎹竴涓?B涔熶竴鏍?鎸夌悊璇碅,B澶у皬搴旇閮芥槸
7瀛楄妭銆?
涔嬫墍浠ュ嚭鐜颁笂闈?殑缁撴灉鏄洜涓虹紪璇戝櫒瑕佸鏁版嵁鎴愬憳鍦ㄧ?闂翠笂杩
涜瀵归綈銆備笂闈?槸鎸夌収缂栬瘧鍣ㄧ殑榛樿璁剧疆杩涜瀵归綈鐨勭粨鏋?閭,箞鎴戜滑鏄笉鏄彲浠ユ敼鍙樼紪璇戝櫒鐨勮繖绉嶉粯璁ゅ榻愯缃憿,褰撶劧鍙互.渚嬪:
#pragma pack (2) /*鎸囧畾鎸?瀛楄妭瀵归綈*/
struct C
{
char b;
int a;
short c;
};
榻?/ #pragma pack () /*鍙栨秷鎸囧畾瀵归綈锛屾仮澶嶇己鐪佸
sizeof(struct C)鍊兼槸8銆?
淇敼瀵归綈鍊间负1锛?
#pragma pack (1) /*鎸囧畾鎸?瀛楄妭瀵归綈*/
struct D
{
char b;
int a;
short c;
};
#pragma pack () /*鍙栨秷鎸囧畾瀵归綈锛屾仮澶嶇己鐪佸榻?/ sizeof(struct D)鍊间负7銆?
鍚庨潰鎴戜滑鍐嶈瑙?pragma pack()鐨勪綔鐢?
涓?缂栬瘧鍣ㄦ槸鎸夌収浠?涔堟牱鐨勫師鍒欒繘琛屽榻愮殑?
鍏堣鎴戜滑鐪嬪洓涓噸瑕佺殑鍩烘湰姒傚康锛?
1.鏁版嵁绫诲瀷鑷韩鐨勫榻愬?硷細
瀵逛簬char鍨嬫暟鎹紝鍏惰嚜韬榻愬?间负1锛屽浜巗hort鍨嬩负2锛屽浜巌nt,float,double绫诲瀷锛屽叾鑷韩瀵归綈鍊间负4锛屽崟浣嶅瓧鑺傘?? 2.缁撴瀯浣撴垨鑰呯被鐨勮嚜韬榻愬?硷細鍏舵垚鍛樹腑鑷韩瀵归綈鍊兼渶澶х殑閭,釜鍊笺??
3.鎸囧畾瀵归綈鍊硷細#pragma pack (value)鏃剁殑鎸囧畾瀵归綈鍊紇alue銆?
4.
归綈鍊间腑灏忕殑閭,釜鍊笺??
鏈?
?
N"%N=0".鑰
?
?灏辨槸缁撴瀯浣撴垚鍛樺彉閲忓崰鐢ㄦ?婚暱搴,渶瑕佹槸瀵圭粨鏋勪綋鏈夋晥瀵归綈鍊肩殑鏁存暟
鍊嶏紝缁撳悎涓嬮潰渚嬪瓙鐞嗚В)銆傝繖鏍峰氨涓嶈兘鐞嗚В
鍊间簡銆?
渚嬪瓙鍒嗘瀽锛?
鍒嗘瀽渚嬪瓙B锛?
struct B
{
char b;
int a;
short c;
};
鍋?璁綛浠庡湴鍧?绌洪棿0x0000
4
1锛屾瘮鎸囧畾鎴栬?呴粯璁ゆ寚瀹?
瀵归綈鍊?灏忥紝鎵?浠ュ叾鏈夋晥瀵归綈鍊间负1锛屾墍浠ュ叾瀛樻斁鍦板潃0x0000绗,悎0x0000%1=0.4
愬?间篃涓?锛?
?x0004鍒?x0007
0x0004%4=0,c,鍊间负
2?锛屽彲浠ュ瓨鏀惧湪0x0008鍒?x0009
?x0008%2=0銆傛墍浠ヤ粠0x0000鍒?x0009瀛樻斁鐨? 閮芥槸Bу愬??杩欓噷鏄痓锛夋墍浠ュ氨鏄??銆傛牴鎹
0x0009鍒?x0000=10瀛楄妭锛岋紙10锛?锛夛紖4锛?銆傛墍浠?x0000A鍒?x000B涔熶负缁撴瀯浣揃鎵?鍗犵敤銆傛晠B浠?x0000鍒?x000B
鍏辨湁12?sizeof(struct B)=12;
,
鍥犱负瀹?,,涔嬫墍浠ュ湪鍚庨潰琛ュ厖2
??璇曟兂濡傛灉鎴
?閭?
?,?鎸夌収鏁扮粍鐨勫畾涔??濡傛灉鎴戜滑涓嶆妸缁撴瀯鐨勫
ぇ灏忚ˉ鍏呬负4鐨勬暣鏁板??閭,箞涓嬩竴
0x0000A,杩欐樉鐒朵笉鑳芥弧瓒崇粨鏋勭殑鍦板潃瀵归綈浜??:瀵逛簬char?
1hort鍨嬩负2nt,float,double绫诲瀷锛屽叾
4
冭檻鐨?鍙?
?
ヤ簡.
鍚岀悊,鍒嗘瀽涓婇潰渚嬪瓙C锛?
#pragma pack (2) /*鎸囧畾鎸?瀛楄妭瀵归綈*/
struct C
{
char b;
int a;
short c;
};
#pragma pack () /*?/
绗?12锛屾墍浠ワ紝鍏舵湁
1锛屽亣璁綜浠?x0000寮?濮嬶紝閭,箞b瀛樻斁鍦?x0000鍚?x0000%1=
0;42
榻愬?间负2锛屾墍浠ラ『搴忓瓨鏀惧湪0x0002銆?x0003銆?x0004銆?x0005鍥涗釜杩炵画
0x0002%2=0c2锛屾墍浠
2锛岄『搴忓瓨鏀?
鍦?x0006銆?x0007
0x0006%2=0銆傛墍浠ヤ粠0x0000鍒?x00007鍏卞叓瀛楄妭瀛樻斁鐨勬槸C鐨勫彉閲忋?傚張C42銆傚張8%2=0,C
?x0000鍒?x0007izeof(struct C)=8. 鍥??
1.鍦?C IDEProject]|[Settings],c/c++ategory鐨凜ode Generation閫夐」鐨凷truct
Member Alignment?瀛楄妭銆?
2.鍦ㄧ紪鐮佹椂锛屽彲浠ヨ繖鏍峰姩鎬佷慨鏀癸細#pragma pack .娉ㄦ剰:鏄痯ragma鑰屼笉鏄痯rogma.
浜?,鎴戜滑鍦ㄧ紪绋嬩腑濡備綍鑰冭檻?
,渶瑕佸亣瀹氱粨鏋勭殑棣栧湴鍧?鏄?,鐒跺悗鍚勪釜鍙橀噺鎸夌収涓婇潰鐨勫師鍒欒繘琛屾帓鍒楀嵆鍙?
绫诲瀷澶у皬浠庡皬鍒板ぇ澹版槑,?杩樻湁涓?绉嶅氨
?鎴戜滑鏄剧ず鐨勮繘琛屽,琛ョ?闂磋繘琛屽
?:鏈変竴绉嶄娇鐢ㄧ?闂存崲鏃堕棿鍋?
eserved鎴愬憳锛?
struct A{
char a;
char reserved[3];//浣跨敤绌洪棿鎹?椂闂?
int b;
}
reserved?
互杈惧埌瀛楄妭瀵归綈鐨勭洰鐨?褰撶劧鍗充娇涓嶅姞杩欎釜鎴愬憳閫氬父缂栬瘧鍣ㄤ篃浼
,
滅敤.
鍏??
unsigned int i = 0x12345678; unsigned char *p=NULL;
unsigned short *p1=NULL;
p=&i;
*p=0x00;
p1=(unsigned short *)(p+1); *p1=0x0000;
unsignedshort鍨嬪彉閲忥紝鏄剧劧涓
?
鍦?86涓婏紝绫讳技鐨勬搷浣滃彧浼氬奖鍝嶆晥鐜囷紝浣嗘槸鍦?IPS鎴栬?卻parc涓婏紝
rror,鍥犱负瀹冧滑瑕佹眰蹇呴』瀛楄妭瀵归綈. 涓?:
?
1. 缂栬瘧鍣ㄧ殑big little?
2. 3. ,濡傛灉娌?湁鍒欑湅璁块棶鏃堕渶瑕佸姞鏌愪
? 鍏?鐩稿叧鏂囩珷:
ARM涓嬬殑瀵归綈澶勭悊
from DUI0067D_ADS1_2_CompLib 3.13 type qulifiers
鏈夐儴鍒嗘憳鑷狝RM?
瀵归綈鐨勪娇鐢?
1.__align(num)
DRD
鎴栬?匰TRD鏃?
_align(8)
?
ф槸8鍒???繘琛?瀛楄妭
瀵归綈,浣嗘槸涓嶈兘璁??瀛楄妭瀵归綈銆?
__align,
?
2.__packed
__packed
1.涓嶈兘瀵筽acked?
2.
3.float鍙婂寘鍚玣loat__packed瀵归綈
4.__packed瀵瑰眬閮ㄦ暣褰?彉閲忔棤褰卞搷
5.寮哄埗鐢眜npacked瀵硅薄鍚憄acked,鍚堟硶瀹?
涔変负packed銆?
__packed int* p; //__packed int 鍒欐病鏈夋剰涔?
6.
__packed struct STRUCT_TEST
{
char a;
int b;
char c;
} ; //瀹氫箟濡備笅缁撴瀯姝ゆ椂b
//?
甗from CL]
//灏嗕笅闈?彉閲忓畾涔夋垚鍏ㄥ眬闈欐?佷笉鍦ㄦ爤涓?
static char* p;
static struct STRUCT_TEST a; void Main()
{
__packed int* q; //姝ゆ椂瀹氫箟鎴恄_packed鏉ヤ慨楗板綋鍓峲鎸囧悜涓洪潪瀵归綈鐨
p = (char*)&a;
q = (int*)(p+1);
*q = 0x87654321;
/*
寰楀埌璧嬪?肩殑姹囩紪鎸囦护寰堟竻妤?
ldr r5,0x20001590 ; = #0x12345678 [0xe1a00005] mov r0,r5 [0xeb0000b0] bl __rt_uwrite4 //4byte鐨勬搷浣滃嚱鏁?
[0xe5c10000] strb r0,[r1,#0] //4trb鎿嶄綔鐒跺悗杩斿洖淇
[0xe1a02420] mov r2,r0,lsr #8 [0xe5c12001] strb r2,[r1,#1]
[0xe1a02820] mov r2,r0,lsr #16 [0xe5c12002] strb r2,[r1,#2] [0xe1a02c20] mov r2,r0,lsr #24 [0xe5c12003] strb r2,[r1,#3] [0xe1a0f00e] mov pc,r14 */
/*
濡傛灉q娌?湁鍔燺_packed
?
[0xe59f2018] ldr r2,0x20001594 ; = #0x87654321
[0xe5812000] str r2,[r1,#0] */
//х? //?
// }
CSDN
ttp://blog.csdn.net/jszj/archive/2009/02/20/3915328.aspx
posted on 2010-03-17 15:55 灏忕帇 (107) (0) 缂栬緫 鏀惰棌 寮曠敤 鎵?灞炲垎绫? c++ 绋嬪簭璁捐
鐩涘ぇBambook绋嬪簭杈句汉璧?
IT鏂伴椈锛?
路
路 2011 CES澶уindows TV
路 娑堟伅绉伴珮閫氬皢浠?5浜跨編鍏冩敹璐瑼theros閫氫俊
路 –EO锛氫粖骞村皢鍚戣偂涓滄淳鍙戠孩鍒?
路 鑱旈?氬紑閫??50鍏?
鎺ㄨ崘鑱屼綅锛?
鍖椾含缃戣矾鏃朵唬璇氳仒C++寮?鍙戝伐绋嬪笀
? 鍗氶棶 IT鏂伴椈 瀛,嫳璇? C++绋嬪簭鍛樻嫑鑱?
?
?
涓婚〉
璇疯緭鍏ラ獙璇佺爜
楠岃瘉鐮?
(鎻愪氦澶辫触鍚?
) 璇疯緭鍏ヨ瘎璁哄唴瀹?
Remember Me?
鐧诲綍 鏂扮敤鎴锋敞鍐? 鎻愪氦
[浣跨敤Ctrl+Enter
姣忓ぉ10
鎺ㄨ崘鑱屼綅锛?
路 .NET 寮?鍙戝伐绋嬪笀 (鍖椾含涓栫邯鑻卞崥)
路 .NET ?(鑻忓窞缁熻喘淇?伅)
路 缃戠珯杩愯惀浜哄憳(鑻忓窞缁熻喘淇?伅)
路 .NET寮?鍙戝伐绋嬪笀(鍖椾含缃戣矾鏃朵唬)
路 [鎬ヨ仒].NET/Web寮?鍙戝伐绋嬪笀(姝,眽鐧剧撼淇?伅鎶?鏈?
路 .NET寮?鍙戝伐绋嬪笀(涓婃捣鐩栦笘缃戠粶)
路 Windows搴曞眰寮?鍙戝伐绋嬪笀(C++)(鍖椾含缃戣矾鏃朵唬)
路 ?NET绋嬪簭鍛??
路 ?浠庡熀纭?鍒板簲鐢ㄦ灦鏋勭郴鍒?
路 Android ?
路 Delphi XE鐨凴TTI澧炲己锛屽姩鎬丠ook鏌愪簺鍐呴儴浜嬩欢
路
笂10鏉ュ勾閮戒繚鎸併?愮Н鏋佷富鍔ㄣ?戠殑蹇冩??
路 鏈堜唤淇?伅浜岀淮鍧愭爣鍥剧粯鍒?--I
鐭ヨ瘑搴擄細
路 鍧愭爣楂橀?熸彃鍏ワ紝绉诲姩鍜屾煡璇?畻娉?
路 鍦?VC2.0浣跨敤Lodop涓篧EB
路 PHP鏈?浣冲疄璺?
路 ?
路 C#?缂撳啿鍖烘孩鍑?
鐩稿叧鏂囩珷:
?
-
VS2005/2008 warning C4251 needs to have dll-interface
瀛楄妭瀵归綈璇,В
Visual C++2010鐨刢++?
獊鐒舵彁鍒颁簡stdcall
富绠,棶鍊掞紝鍐嶆俯涔犱竴閬?
缃戠珯瀵艰埅:
? IT鏂伴椈 ? BlogJava IT
? PHP ? 绠,悊
鏈?绠?娲侀槄璇荤増寮忥細
瀛楄妭瀵归綈璇,В
<2010骞?鏈?
鏃ヤ竴浜屼笁鍥涗簲鍏?
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910
甯哥敤閾炬帴鎴戠殑闅忕瑪
鎴戝弬涓庣殑闅忕瑪
鐣欒?绨?1)缁欐垜鐣欒?
鏌ョ湅绉佷汉鐣欒?
闅忕瑪鍒嗙被(103)C#涓撴爮
c++ (7)
DB(3)
Java涓撴爮(2)
linux涓撴爮(9)
STL銆丅oost(6)
VC涓撴爮(7)
Web寮?鍙?1)
鎿嶄綔绯荤粺(1)
澶氭牳缂栫?(3)
鍒嗗竷寮忕郴缁?4)
姹囩紪(1)
寮?婧愰」鐩?2)
鍏朵粬(9)
(1)
(5)
?1)
(15)
?15)
娓告垙寮曟搸(11)
(107)2010骞?2鏈?(1)
2010骞?1鏈?(7)
2010骞?0鏈?(7)
2010骞?鏈?(2)
2010骞?鏈?(2)
2010骞?鏈?(3)
2010骞?鏈?(3)
2010骞?鏈?(1)
2010骞?鏈?(4)
2010骞?鏈?(6)
2010骞?鏈?(12)
2010骞?鏈?(22)
2009骞?2鏈?(1)
2009骞?1鏈?(7)
2009骞?鏈?(5)
2009骞?鏈?(4)
2009骞?鏈?(4)
2009骞?鏈?(15)
2008骞?0鏈?(1)
Linuxchinaunix
娓告垙寮?鍙戦噾搴?
缁煎悎Intel
位-calculus
鍛ㄤ紵鏄?
鏈?鏂伴殢绗?. 鎴愪负涓?鍚嶄紭绉?绋嬪簭鍛樻墍闇?瑕佺煡閬撶殑閭,簺浜?
2. error LNK2019: ?__imp___CrtDbgReportW
3. vs2005鎶辨?ㄦ壘涓嶇潃libc.lib鐨勯棶棰?
4. ?
5. 鐢?Eclipse C/C++ 寮?鍙?
6. 寮?鍙戠瑪璁帮細鍦?buntu涓嬪畨瑁匤DK 6鍜孍clipse
7. 缂栬瘧openfetion2
8. 缂栬瘧Openfetion
9. Ubuntu9.10 VI涓嬫柟鍚戦敭鍙樻垚ABCD鐨勮В鍐冲姙娉?
10. 绋嬪簭鍛樺繀椤荤煡閬撶殑SQLSERVER鏁版嵁搴撲紭鍖栨妧宸? 鎼滅储
鏈?鏂伴殢绗?. 鎴愪负涓?鍚嶄紭绉?绋嬪簭鍛樻墍闇?瑕佺煡閬撶殑閭,簺浜?
2. error LNK2019: ?__imp___CrtDbgReportW
3. vs2005鎶辨?ㄦ壘涓嶇潃libc.lib鐨勯棶棰?
4. ?
5. 鐢?Eclipse C/C++ 寮?鍙?
6. 寮?鍙戠瑪璁帮細鍦?buntu涓嬪畨瑁匤DK 6鍜孍clipse
7. 缂栬瘧openfetion2
8. 缂栬瘧Openfetion
9. Ubuntu9.10 VI涓嬫柟鍚戦敭鍙樻垚ABCD鐨勮В鍐冲姙娉?
10. 绋嬪簭鍛樺繀椤荤煡閬撶殑SQLSERVER鏁版嵁搴撲紭鍖栨妧宸? 鏈?鏂拌瘎璁?1. re: ?
--yugi
2. re:
?
--2009
3. re: 鎵句笉鍒癲3dx9_38.dll[
鎵句笉鍒版?庝箞鍔?
--cc
4. re: vs2005EGUI 0.6.0
涔?
--aaa
5. re: -
- -!
--Kevin Lynx
?. vs2005EGUI 0.6.0(1202)
2. 鍙风О
剧墖灏变笉鍙戜簡锛屾噿锛?1100)
3. ?817)
4. oogle鏂囦欢绯荤粺鍜孠osmos 鏂囦欢绯荤粺
(578)
5. (562)
?. kosmixGFS鐨勫垎甯冨紡鏂囦欢绯荤粺
(3)
2. (3)
3. 娌?湁鎵惧埌MSVCR90.dll,
?1)
4. ?1)
5. 鎵句笉鍒癲3dx9_38.dll(1)
Powered by: ?妯?澘鎻愪緵锛氭勃姹熷崥瀹?Copyright 漏2011 灏忕帇