标题: 一个C语言内存对齐的问题
卡订之
新生入学
Rank: 1



UID 218781
精华 0
积分 11(积分有什么用?)
帖子 50
阅读权限 10
注册 2007-11-23
状态 离线
发表于 2007-11-27 12:24  资料  个人空间  短消息  加为好友 
不明白,学习下~~~~~

顶部
不容错过的IBM 集群技术资源汇总
zengxiaolong
新生入学
Rank: 1
注册用户



UID 160216
精华 0
积分 0(积分有什么用?)
帖子 3
阅读权限 10
注册 2006-6-6
状态 离线
发表于 2007-12-13 12:32  资料  个人空间  短消息  加为好友 
字节对齐


顶部
民工甲
新生入学
Rank: 1



UID 223446
精华 0
积分 10(积分有什么用?)
帖子 5
阅读权限 10
注册 2008-3-11
状态 离线
发表于 2008-3-12 19:15  资料  个人空间  短消息  加为好友  添加 民工甲 为MSN好友 通过MSN和 民工甲 交谈
新人 拙见

在linux中以四个字节为开辟单元,即不足四个 开辟四个,多四个的 继续开辟四个 多出的部分 放进另一个四个字节中,? w_A[
linux中:
HH'fuu\'^www.linuxeden.comstruct
*|7E-d2}@&e{  /dsCDT:aQ zd
t

   char a;    //开辟第一个四字节, a占有一个 余三个,留下一个存, int为四个字节 放不下,所以从新开辟四个字节, 因此到此为4个字节.Mu~(^;Rx%}        gT
   int   b;   //32位机器中  int等同与long int ,所以开辟四个, 到此为4+4=8个字节.$C8f`!s:Q
  double c;//开辟两个四字节,所以到此为8+8=16Linux伊甸园论坛u3D        sge1?S
   char d;  //开辟四个 ,16+4=20.
Kyc#P,I(e/G}Linux伊甸园论坛5D`'~1rpN8DP
最后 linux为20字节[zz7z'wpub
Linux伊甸园论坛6i o0Y.FYx~8z
window中是以最大单元为开辟单位,即系统先检查结构中最大单位 为double 8个字节,所以以八个字节为单位.
cwi        q
z/t,pwww.linuxeden.com
Linux伊甸园论坛;q)N
^        gkI.b%z

struct
Ek$W$T9F5O{ cUDV0W*V4[1{
   char a;  //开辟八个字节,a用去一个,继续存放b,c存不下 所以到此为8个字节;~_xLcsh$sM
   int    b; // 到此为8个
;{9h tmG3{-KV&QY  double c;  //开辟新空间 到此为8+8=16;
mgI%[_www.linuxeden.com  char  d;  //上一单元C放满 开辟新八个单元,  最后字节为 16+8=24;
s7X%E3Z9a|maLinux伊甸园论坛}www.linuxeden.com aVaY ]
最后windows为24字节

顶部
DarkSpy
版主
Rank: 7Rank: 7Rank: 7
版主


UID 5
精华 4
积分 0(积分有什么用?)
帖子 3325
阅读权限 100
注册 2000-7-30
来自 ConeosBraintel. Matrix
状态 离线
发表于 2008-3-26 22:35  资料  个人空间  主页 短消息  加为好友  ICQ 状态
以 8 字节对齐.JS)D#DLL_0] vc
structMb9Z0^h/pZ
{+A*^!Xw(}o`
char a;    1 字节, 对齐补1个字节 共 2字节Linux伊甸园论坛:iX;|D$m&ZSm4m
short  b;  2 字节, 补 4 字节对齐 共 6字节Linux伊甸园论坛"`t#]{C.d/C(vM
double c; 8 字节 1Lz:vwSVW
char d;   1 字节        G`#};^)gE;Jy
};
2E8q+lm P/r9|
|q
2+6+8 + 1 = 17 , 8 字节对齐, 3*8=24
6\0_-S@_        c所以是 24 字节
.g5q{^AR"zwww.linuxeden.com$Xf P
| X7L/m

第二种l;A&c-E        Mz
struct:J"m;]tm@+X"Y_
{www.linuxeden.com[NgK%`"|Y @!i
double c; 8 字节
"Q
g$x(AT
G4]        wwww.linuxeden.com
char a; 1 字节, 补齐1字节补齐, 共2字节i(N0C&p/H
N2C\I1? q        u]

short  b;  2 字节
? [(Mx
A]

char d;  1 字节3w~)Oo%JLzYD
};
/ry2t%D&cW8+2+2+1=13, 2*8=16
Ug\S.k b"} X`r所以是 16 字节





-----------------------------------------
耶稣说:「谁若知道世界,便是发现了一具躯壳;谁若发现了一具躯壳,对那人来说,世界不值得甚麼。」
              ----(圣经次经: 多玛福音:56)
顶部
xgf
新生入学
Rank: 1



UID 214769
精华 0
积分 11(积分有什么用?)
帖子 34
阅读权限 10
注册 2007-10-17
状态 离线
发表于 2008-3-29 15:23  资料  个人空间  短消息  加为好友 
[回复]关于内存对齐的问题

结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。
kz;dt:C$Z Z}TD而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值之间,较小的那个进行。

顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-17 10:54

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.110838 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP