0
点赞
收藏
分享

微信扫一扫

c语言 内存对齐 结构体大小问题

兽怪海北 2022-04-04 阅读 77
c语言

结构体内存对齐

规则:一个结构体有三个成员,分别是char、int、short类型,三个成员位于结构体中不同位置时整个结构体的大小可能是

#include <stdio.h>
struct s1{char a; int b; short c;};
struct s2{char a; short c; int b;};
struct s3{int b; char a; short c;};
struct s4{int b; short c; char a;};
struct s5{short c; int b; char a;};
struct s6{short c; char a; int b;};
int main()
{
    printf("char  int   short 排列大小 = %ld \n", sizeof(struct s1));  // char占1个字节,int占4个字节,1个字节存储不下,扩充为4个字节,short2个字节,填充2个字节
    printf("char  short int   排列大小 = %ld \n", sizeof(struct s2));  // char 和short+1共占4个字节,int独占一个4位的字节
    printf("int   char  short 排列大小 = %ld \n", sizeof(struct s3));  // int 独占4个字节,char 和short+1共占一个4位字节
    printf("int   short char  排列大小 = %ld \n", sizeof(struct s4));
    printf("short int   char  排列大小 = %ld \n", sizeof(struct s5));
    printf("short char  int   排列大小 = %ld \n", sizeof(struct s6));
    return 0;
}

输出结果

char  int   short 排列大小 = 12 
char  short int   排列大小 = 8 
int   char  short 排列大小 = 8 
int   short char  排列大小 = 8 
short int   char  排列大小 = 12 
short char  int   排列大小 = 8 

一个结构体中含有相同的成员,排列顺序不同,就有不同的大小。
举s1的例子:假设有一块20个字节的连续内存空间
在这里插入图片描述
char 存入占一个字节,int存入占4个字节,然后因为内存对齐的原因,char后面需要补充3个空,占4个字节位,short后面补充2个空。
图2

举报

相关推荐

0 条评论