gpt4 book ai didi

C语言结构体计算内存占用问题解析

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C语言结构体计算内存占用问题解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

    c语言中结构体使用是非常广泛的,但是结构体有一个问题,就是如果开头的字段属性是字符类型(char),紧跟着的是其他类型,比如整型、长整型、双精度、浮点型,这时候结构体的大小会发生改变,下面给出一个示例:

?
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
struct person{
   char sex;
   int age;
   char name[8];
};
int main()
{
   printf ( "sizeof(person) = %d\n" , sizeof ( struct person));
   return 0;
}

    这个示例很简单,就是定义一个结构体,三个属性:分别是char类型的sex,int类型的age,char[]类型的name,直观的看,大小应该是1+4+8=13,但是我们编译,运行,结果如下所示:

?
1
2
3
# clang hello.c -o hello
# ./hello
sizeof(person) = 16

    开始的char并不会被分配1byte,而是4byte,是为了和相近的int对齐,这就是c语言结构体的内存对齐的具体表现,在linux下,可以通过增加__attribute__((__packed__))在结构体声明的地方,修改上述代码,如下所示:

C语言结构体计算内存占用问题解析

    程序运行,最终的打印结果是13,符合我们原来的预期。  。

    还有一种修改办法,就是指定字段对齐大小为1,如下所示:

C语言结构体计算内存占用问题解析

    这两种办法,好像只有在linux下才会生效,在windows下这种办法会报语法错误.

到此这篇关于C语言结构体计算内存占用问题解析的文章就介绍到这了,更多相关C语言结构体内存占用内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/feinifi/article/details/115606739 。

最后此篇关于C语言结构体计算内存占用问题解析的文章就讲到这里了,如果你想了解更多关于C语言结构体计算内存占用问题解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com