为何未分配内存时C语言中struct node的sizeof返回16?
为什么未分配内存时
sizeof(struct node)仍返回16? 首先要明确:sizeof的作用是计算数据类型或变量的内存占用大小,它和你有没有给结构体分配内存完全没关系。它的值在编译阶段就确定了,根本不会依赖运行时的内存分配操作(何况你这段代码里也没写内存分配的逻辑)。
你的结构体struct node包含两个成员:
int data:在多数系统上,int类型占4字节struct node *next:这是一个指针,在64位系统中指针类型固定占8字节
那4+8=12,为什么最终结果是16?这是因为内存对齐规则。C编译器为了让CPU访问内存更高效,会把结构体的总大小对齐到「最大成员字节数」的整数倍。这里最大成员是指针(8字节),所以12要向上对齐到16,这就是你看到结果为16的核心原因。
另外,C标准明确规定:任何对象的大小都不能为0。哪怕你定义一个空结构体,编译器也会给它分配至少1字节的大小,用来区分不同的结构体实例。所以你之前以为会返回0,本身就是对sizeof的功能误解。
总结一下:sizeof只关注类型本身的定义,不管你有没有创建该类型的实例、有没有给实例分配内存,它都会根据成员类型和内存对齐规则,计算出该类型实例在内存中需要占据的最小字节数。
内容的提问来源于stack exchange,提问作者Md. Al-Amin Patwoary
相关产品推荐
相关产品推荐

