嗨我想创建一个无填充字节来计算结构大小的函数。
示例:
struct test{
int x;
char y;
int z;
};
如果我计算上述结构的大小,我必须得到9个字节(即没有填充字节)
考虑我可能不知道struct中存在的变量的情况。
示例:
struct test{
int x;
....
....
....
int z;
};
所以,如果我计算尺寸,它应该给出正确的尺寸。
是否有可能写这样的功能?我尝试阅读结构,但我找到任何解决方案。我看到有一些编译器选项存在,我可以得到但我不想要任何构建编译器选项。
答案 0 :(得分:3)
不,C没有足够的内省来实现这一目标。在运行时,没有信息可以让程序“知道”结构中的哪些字段,或者它们的类型是什么。
答案 1 :(得分:3)
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上面给出的答案并不矛盾。