我读到过结构体成员不需要在内存中连续。这是不是意味着它们可以像不同的变量一样位于内存中的任意位置?如果是这样,那么为结构体分配空间使用malloc会浪费很多存储空间吗?
我读到过结构体成员不需要在内存中连续。这是不是意味着它们可以像不同的变量一样位于内存中的任意位置?如果是这样,那么为结构体分配空间使用malloc会浪费很多存储空间吗?
尽管 struct 成员不一定是连续的,但它们也不会出现在任意的内存位置。例如,考虑以下定义:
struct MyStruct
{
char foo;
int bar;
};
sizeof(int) == 4
,那么foo
将位于偏移量0处,bar
将位于偏移量4处(为了正确对齐)。因此整个结构体将占用8字节,尽管它可以在5字节内完成。但是,这些偏移量将始终对于结构的每个实例相同。因此回答你关于malloc
的问题,不会浪费空间。