请看下面代码:
#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可以连续分配。