首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求解一路字节对齐的题目

2012-08-27 
求解一道字节对齐的题目在对齐为4的情况下struct BBB{long num;char *nameshort int datachar hashort

求解一道字节对齐的题目
在对齐为4的情况下
struct BBB
{
  long num;
  char *name;
  short int data;
  char ha;
  short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
希望各位达人给出答案和原因,谢谢拉
解答:假设在32位CPU上,
sizeof(long) = 4 bytes
sizeof(char *) = 4 bytes
sizeof(short int) = sizeof(short) = 2 bytes
sizeof(char) = 1 bytes

由于是4字节对齐,
sizeof(struct BBB) = sizeof(*p) 
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)

p=0x1000000;
p+0x200=____;
  = 0x1000000 + 0x200*24

(Ulong)p+0x200=____;
  = 0x1000000 + 0x200

(char*)p+0x200=____;
  = 0x1000000 + 0x200*4


其中第一小题我知道是24字节,但是后面的3个我就不太明白了,求高手给个解释

[解决办法]
1. p+0x200=

p是指向struct BBB型的指针,所以p+0x200就是 0x1000000 + sizeof(struct BBB)*0x200;

(就像int *p 跟char *p中的 p + 1 区别)

2. (Ulong)p+0x200=
p被强制换成unsigned long 型的了,它不是指针了,所以这个就是普通的加法,像 1+1=2..

3. (char*)p+0x200=

p被强制转换成指向char型的指针了,所以(char*)p+0x200 = 0x1000000 + 0x200*sizeof(char)

热点排行