C中带指针的结构的内存开销
我意识到当我的结构包含指针时,会有内存开销。这里有一个例子:C中带指针的结构的内存开销,c,pointers,memory,C,Pointers,Memory,我意识到当我的结构包含指针时,会有内存开销。这里有一个例子: typedef struct { int num1; int num2; } myStruct1; typedef struct { int *p; int num2; } myStruct2; int main() { printf("Sizes: int: %lu, int*: %lu, myStruct1: %lu, myStruct2: %lu\n", sizeof(int),
typedef struct {
int num1;
int num2;
} myStruct1;
typedef struct {
int *p;
int num2;
} myStruct2;
int main()
{
printf("Sizes: int: %lu, int*: %lu, myStruct1: %lu, myStruct2: %lu\n", sizeof(int),
sizeof(int*), sizeof(myStruct1), sizeof(myStruct2));
return 0;
}
这将在我的64位计算机中打印以下内容:
Sizes: int: 4, int*: 8, myStruct1: 8, myStruct2: 16
除了myStruct2
的大小之外,一切对我都有意义,我认为它的大小应该是12而不是16(sizeof(int*)+sizeof(int)=12
)
谁能解释一下为什么会发生这种情况?
谢谢大家!
(我很确定这一定是在其他地方问过的,但我找不到。)这是填充标准说在结构中可能有未命名的填充,或者在结尾,但不是在开头。C99标准草案第6.7.2.1节《结构和联合规范》第13段规定:
[…]结构对象中可能有未命名的填充,但在其开始处没有
第15段说:
结构或联合的末尾可能有未命名的填充
可能是8字节的打包/对齐吗?请您详细说明编译器的对齐设置好吗?我认为这不是8字节对齐,因为一个正好包含3个整数的结构的大小是12.yay,谢谢!现在我很好奇:为什么会发生这种事?@Urinito就我所知,这一直都是关于这个问题的,而且这个问题更相关。