C语言中结构体变量所占内存大小的计算
2021/6/6 7:21:38
本文主要是介绍C语言中结构体变量所占内存大小的计算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
“系统为结构体变量分配的内存空间的大小,并非是其所有成员所占内存大小之和,它不仅与所定义的结构体类型有关,还与计算机系统本身有关。
由于结构体变量成员的内存对齐方式和数据类型所占的内存大小都是与机器相关的,因此结构体在内存中所占的字节数也是与机器相关的。”
----------------------------------《C语言程序设计(苏小红)》
在计算结构体变量所占内存的字节数时,通常要依据两条原则来计算:
(1)前n个结构体成员所占内存的字节数之和等于第n+1个结构体成员所占字节数的整数倍,不足的在第n个结构体成员上按最小数补齐。
(2)结构体所有成员所占内存的字节数之和等于结构体成员中所占内存最大的的字节数的整数倍,不足的在最后一个结构体成员上按最小数补齐。
#include <stdio.h>
typedef struct data {
int year;
int month;
int day;
} DATE;
typedef struct student {
long studentID;//4
char studentName[10];//1*10
char studentSex;//1
DATE birthday;//3*4
int score[4];//4*4
} STUDENT;
int main() {
STUDENT stu1 = {.studentID = 100310121, .studentName = "王刚", .studentSex = 'M', .birthday = {.year = 1991, .month = 5, .day = 19}, {72, 83, 90, 81}};
printf("bytes=%d\n", sizeof(stu1));
return 0;
}
以64位体系结构和上述代码中的stu1结构体变量为例:
(1)正常所占内存大小
long studentID ----------4字节
char studentName[10] -----------10个1字节
char studentSex -----------1字节
DATE birthday -----------4个4字节
int score[4] -----------4个4字节
结构体stu1所占内存大小:43
计算过程
sizeof(1)%sizeof(2)=0
{sizeof(1)+sizeof(2)}%sizeof(2)=0
......
{sizeof(1)+sizeof(2)+......sizeof(12)}%sizeof(13)=3:第12个结构体成员需补1
......
{sizeof(1)+sizeof(2)+......sizeof(20)}%4=0
(2)补齐后所占内存大小
long studentID ----------4字节
char studentName[10] -----------10个1字节
char studentSex -----------2字节
DATE birthday -----------4个4字节
int score[4] -----------4个4字节
结构体stu1所占内存大小:44
这篇关于C语言中结构体变量所占内存大小的计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升