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日

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应