聘我网

新概念招聘3.0

gcc内部如何计算struct的大小?

vote up0vote downstar
struct {
   integer a;
   struct c b;
   ...
}

对于任意structgcc如何计算其尺寸?

求内幕!

 

1 个答复

vote up0vote downcheck

步骤如下:

  1. 初始值0
  2. 对每个元素,尺寸上舍入到该元素的alignment的整数倍,然后加上该元素的尺寸。
  3. 将最后结果上舍入到所有元素的alignment的最小公倍数。

例子:

struct foo {
    char a;
    int b;
    char c;
};
  1. 尺寸初始为0
  2. 先上舍入到char(1)alignment的整数倍,仍然为0
  3. 加上char(1)的尺寸,变成1
  4. 上舍入到int(4)的alignment,变成4
  5. 加上int(4)的尺寸,变成8
  6. 上舍入到char(1)alignment的整数倍,仍然是8
  7. 加上char(1)的尺寸,变成9
  8. 最后结果上舍入到char(1)和int(4)alignment的最小公倍数,变成12

所以这个struct的尺寸就是12字节。

更新

其中第3步是为了保证数组情况下每个struct的所有元素都能够对齐,而数组成员在内存中是连续的,所以必须保证连续2struct的间隔是struct中所有元素的alignment的最小公倍数(数学问题,可画图思考)。

更新2

每种基础数据类型在各arch上的alignmenthardcode在编译器里的。

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.