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语言中结构体变量所占内存大小的计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程