【发布时间】:2013-01-01 02:47:06
【问题描述】:
假设我有一个结构:
struct A {
uint16_t a;
uint64_t b;
};
有没有办法获得 A w/o padding 的大小?即:所有成员的sizeof之和(即使它不是递归的)。
通常sizeof(A) == 16.
我想要__GCC_sizeof__(A) == 10。
我希望它在不影响实际代码的测试代码中使用,这意味着结构定义中没有"#pragma"s 和"__attribute__"。
(虽然用#ifdef TEST可以做到,但是很丑)。
不一定非要便携,GCC 就够了。
谢谢!
【问题讨论】:
-
我怀疑它可以在没有编译指示的情况下完成。
-
澄清一下,你是想从你的结构中删除填充,还是只是得到它将是没有填充的大小?
-
斯拉夫语,第二部分。只是干净的大小(留下填充)。
-
没有意义 TBH。例如。您期望
__GCC_sizeof__(&A::a)的价值是多少?指向成员的指针中可能有一些填充,但您不能对此采取行动。 -
嗯,指针的大小不是针对特定架构固定的吗?我可能希望它在我使用的系统上是 8 个字节。