函数计算结构的大小,而不填充字节(function that calculate Size of S

2019-10-17 16:14发布

你好我想打哪个计算结构的大小不填充字节的功能。

例如:

struct test{
    int   x;
    char  y;
    int   z;
};

如果我计算上述结构的大小我必须得到9字节(即没有填充字节)

并考虑在那里我可能不知道存在的结构变量的情况下。

例如:

struct test{
    int   x;
    ....
    ....
    ....
    int   z;
};

所以,如果我计算出它的大小应该给予正确的大小。

是否有可能做写出这样的功能?我试着阅读结构的,但我不力找到任何solution.I看到有一些编译器选项是从我可以存在,但我不希望任何在建编译器选项。

Answer 1:

不,C没有足够的反省,使这一切成为可能。 在运行时,没有留下的信息,该程序可以使用“知道”哪些字段结构,或者是它们的类型。



Answer 2:

sizeof编译器结构应该给你的对象“为编译器看到”的大小。 大多数编译器将调整对在空间为代价的高效的内存访问4个字节边界结构。 尝试

#include <stdio.h>
int main() {
  struct test{
    int x;
    char a;
    int y;
  };
  struct test myStruct;
  printf("size of myStruct is %ld\n", sizeof(myStruct));
}

当我运行它,我得到

size of myStruct is 12

这表明我的编译器,在这种情况下,被分配四个字节为“A”。 我认为这是你的答案......除非我真的误会了你的问题,特别是你的“无填充字节”的评论。

重写的定义struct为:

  struct test{
    int x;
    char a;
    int y;
  }__attribute__((packed));

输出变为

size of myStruct is 9

这只能在编译时 - 所以它不是一个真正的“功能”。 如果你不知道你在编译时结构并不适用。 因此,我想我的答案和@unwind上面给出的一个并不矛盾。



文章来源: function that calculate Size of Structure without padding bytes
标签: c++ c struct