C语言结构体的存储分配

1.简介

若结构体里面包含多种数据类型,其如何在内存中分配存储空间呢?

编译器在处理结构体空间分配时,采取的是对齐方式,按照结构体中成员中成员类型字节数最大的为标准,从上往下对结构体成员进行赋值,若当前成员的字节数小于最大成员字节数,接着为下一个连续分配内存,若下一个的内存分配后会大于最大成员字节数,则为当前成员补齐至最大成员字节数。

2.具体解析

#include<stdio.h>

typedef struct node
{
	char a;  //1字节
	float b;  //4字节
	double c;  //8字节
	int *p;   //由编译器决定
}pnode;
int main(int argc, char const *argv[])
{
	/* code */
	pnode n;
	printf("字节数为:%lu\n",sizeof(n) );
	return 0;
}

这里的字节数计算:最大字节数为c变量,8字节,接着分配时:

a :1        sum=1<8

b:    4        sum=1+4<8

c :    8        sum=5+8>8 ,补齐3个字节后再为c分配,sum=5+(3)+8=16

d:     8(指针根据最大字节数来分配)    sum=16+8=24

结果为24字节。

改变下顺序

#include<stdio.h>

typedef struct node
{
	char a;  //1字节
	double b;  //8字节
	float c;  //4字节	
	int *p;   //由编译器决定
}pnode;
int main(int argc, char const *argv[])
{
	/* code */
	pnode n;
	printf("字节数为:%lu\n",sizeof(n) );
	return 0;
}

输出字节:1+(7)+8+4+(4)+8=32

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值