首页
社区
课程
招聘
[旧帖] 一个结构体对齐问题,高手们请进 0.00雪花
发表于: 2012-11-7 10:51 3026

[旧帖] 一个结构体对齐问题,高手们请进 0.00雪花

2012-11-7 10:51
3026
typedef enum _MINISPY_COMMAND {
    GetMiniSpyLog,
    GetMiniSpyVersion
} MINISPY_COMMAND;

typedef struct _COMMAND_MESSAGE {
    MINISPY_COMMAND Command;
    ULONG Reserved;  // Alignment on IA64
    UCHAR Data[];
} COMMAND_MESSAGE, *PCOMMAND_MESSAGE;

Alignment on IA64
这个对齐问题我没看懂
各位大牛能指点一下吗,具体是怎么计算出来的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1501
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
http://wenku.baidu.com/view/fcb1c30d6c85ec3a87c2c584.html
我要说的话都在这里,既有原理,又有例子,还讲了为什么要对齐
看好了以后如果有疑问请提出~
2012-11-7 11:16
0
雪    币: 1501
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道你是没看完还是没准备继续问。。

在IA64是8bytes对齐要求,所以加了个8字节的ULONG的Reserved变量,用来保证代码里的数据在内存中是这样一个存在状态
地址1 command(系统默认字节)+(8-系统默认)字节的空白
地址2 Reserved(8字节)
地址3 UCHAR(由于是可变数组,我们暂定为1字节)+7字节的空白

但是如果不加8字节的ULONG的Reserved变量,来决定,可能会变成
地址1 command(系统默认字节)+(结构体的自身对齐值和系统默认对齐值的最小值)字节的空白+UCHAR
或者可能是
地址1 command(系统默认字节)+(结构体的自身对齐值和系统默认对齐值的最小值)字节的空白+UCHAR[50]假定总共100个吧
地址2 另一半的UCHAR[50]

可能会UCHAR造成读取错误,或者是一些总线错误
不同架构的CPU为了提高内存访问的速度,决定了某些数据类型只能从特定的起始位置开始读,这样就决定了数据类型必须按照指定的规则在内存中存放,而不能一个接一个的存放。

P.S:术语的说明 请自己阅读上述百度文库的内容来理解

我是跟你同一时间开始看这个知识点的。如果有错误欢迎大神来指正
2012-11-7 14:47
0
游客
登录 | 注册 方可回帖
返回
//