【发布时间】:2013-04-10 06:18:03
【问题描述】:
假设我有一个结构:
struct myStruct
{
int a;
short b;
char c;
};
在 Windows 中,MSDN states that int 占用 4 个字节,short 占用 2 个字节,char 占用 1 个字节。总共最多 7 个字节。
我了解大多数编译器会使用未指定的字节数填充结构以改善对齐。所以,当我执行这个程序时,
#include <stdio.h>
int main(void) {
printf("%d\n", sizeof(struct myStruct));
return 0;
}
我得到8 的输出。这意味着填充了 1 个字节。
有什么方法可以让我在代码中可维护地确定struct 的大小(缺少将单个sizeofs 相加)?
我问这个是因为以后,如果我需要更改我的结构以包含大约 15 个以上的元素,并且如果我再添加 5 个结构,我所有的 struct sizeofs 都会改变,导致事情变得混乱。
【问题讨论】:
-
为什么需要结构的“逻辑”大小而不是实际大小?
-
因为我正在处理套接字和根据结构大小计算要发送的字节的东西。所以在这里,实际的内存使用并不重要(除非我的内存用完了)。
-
但在这种情况下,您需要 real 结构体大小。你有没有想过结构包装?
-
不是真的,因为我并不总是发送整个结构。我知道使用真正的结构大小要容易得多,但不幸的是,我正在处理大量代码库(即使我想也无法更改)。是的,我读过关于 struct packing 的文章,但我不想尝试,因为我读过它会严重影响性能。
-
@AnishRam:为什么结构体的 sizeof 应该决定发送的字节数?您希望您的有线协议独立于编译主机的填充和字节序。因此,以可移植的方式将结构解压到字节缓冲区,然后发送。
标签: c struct sizeof maintainability