你好我想打哪个计算结构的大小不填充字节的功能。
例如:
struct test{
int x;
char y;
int z;
};
如果我计算上述结构的大小我必须得到9字节(即没有填充字节)
并考虑在那里我可能不知道存在的结构变量的情况下。
例如:
struct test{
int x;
....
....
....
int z;
};
所以,如果我计算出它的大小应该给予正确的大小。
是否有可能做写出这样的功能?我试着阅读结构的,但我不力找到任何solution.I看到有一些编译器选项是从我可以存在,但我不希望任何在建编译器选项。
不,C没有足够的反省,使这一切成为可能。 在运行时,没有留下的信息,该程序可以使用“知道”哪些字段结构,或者是它们的类型。
该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上面给出的一个并不矛盾。