局部变量和结构体的内存分配

请看下面代码:

#include 
  
  

void f(int *p)
{
	*p = 3;
}

struct S
{
	short c;
	short d;
};

void main( void )
{
	short a = 0x1234;
	short b = 0x5678;

	struct S s1;
	s1.c = 0xaabb;
	s1.d = 0xccdd;
}
在内存中实际的分配情况如下:


0x0012ff74
BB AA DD CC 78 56 CC CC 34 12
由内存可知在内存中变量是这样对应的:s1.c -> s1.d -> b -> a。这个顺序和变量申请顺序正好相反,由此可知局部变量采用了压栈的存储方式。
但是由上我们也可知结构体中变量的内存分配是按照顺序分配的,而不是压栈方式。
从上面我们还可以发现一个知识点:局部变量是按照4字节补齐的,不管是char还是short,只要不够4字节就按照四字节补齐。而结构题中是按照内存补齐的原则进行的,所以这里面的c、d可以连续分配。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值