在c码中,有main函数的3个局部变量。总结一下在堆栈中的形成及位置:
-4c开始40h个字节填0,使用19h个字节写入a数组
-CC开始40h个字节填0,并将19h个字节的a数组复制进来当作b数组
-8c开始2bh个字节被写入数组C。
-61开始15h个字节填0。
源码及实际执行时的形成顺序都是这样abc,但是在堆栈中的排列却是acb
b数组位于堆栈的上方,再上面就是作为printf函数的参数-DC -D8的栈顶了,这2个
位置一直是在被重复覆盖使用的。
大括号中的b数组为什么会处于栈的上方,或许真是因为大括号的作用,因为离栈顶越近,理论上越有可能被覆盖做它用,但是编译时已经把局部变量的空间大小考虑好了,所以似乎也不会出现别的局部变量占用的情况。。。。。。
另外还可以看到 C数组虽然没有被初始化为0,但是编译器最后还是将剩余的15h个字节的数组空间填0了。
。。。。。。
其实可以作为对比,再来几个,对照着分析一下,就能确定了。我是不弄啦,头晕。不过对于这段代码,虽然没有确定的看出大括号的作用,但是从这中间,我学到了很多东东。很勃大 很精深。