qq_37335168 2022-05-13 14:44 采纳率: 84%
浏览 21
已结题

c语言结构类型变量所占有的内存空间问题,按照所有类型的内存空间相加,下面的应该是13,113吧,还有一个难以计算?

#include <stdio.h>
struct SIMPLE
{
    int a;
    char b;
    double c;
} simple;
//此结构体的声明包含了其他的结构体
struct COMPLEX
{
    char string[100];
    struct SIMPLE a;
} complex;
/此结构体的声明包含了指向自己类型的指针
struct NODE
{
    char string[100];
    struct NODE *next_node;
}node;
int main()
{

 printf( "Memory size occupied by a: %d\n", sizeof(a));
 printf( "Memory size occupied by complex: %d\n", sizeof(a));
printf( "Memory size occupied by node: %d\n", sizeof(node));

}

为什么结果显示a是16,complex是120,node是112?

  • 写回答

4条回答 默认 最新

  • 张十五 2022-05-13 15:36
    关注

    struct SIMPLE里面类型的大小是,4,1,8,对其大小为8(一般为最大的),结构体大小为最大的倍数。按顺序放4,1放一个8字节,8单独一个8字节。
    struct COMPLEX里面类型的大小是,100个1,4,1,8,对其大小为8(一般为最大的),结构体大小为最大的倍数。按顺序放前96个1,放到12个8里面,接下来两个1和一个四放到一个8里,接下来的1,放到一个8里,最后一个8放到一个8里。15个,120。关于第二个8,因为它们还要遵守,放到位置的相对地址是自己大小的整倍数处,所以那个4只能放到他那个8的后半部分,而不能紧挨着那两个1放。同理,最后一个8单独占一个8。

    同理,最后一个,你应该实在x64位系统下运行的,所以是那个指针大小是8(x86是4),最大所以是,96(96*1),8(4*1),8(8) = 112;x86下是104

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 创建了问题 5月13日