感觉C点比较弱,可能和ASM比较有关系,但这里人多,就发在这了:p
如题
小弟最近在写一个简单的C编译器,但对于区域变量是如何放在堆叠上的有些迷惑
例如
int main()
{
int a = 111;
if(a)
int b = 222;
int c = 333;
return 0;
}
一开始我是想说,编译器是在要使用时才把变量push到堆叠上的
像是遇到a = 111,就在堆叠上push一个111,然后只有if成立时才把222 push到堆叠上,
反之则跳过
可是看了好几个组合语言的范例(x86 Arm),好像会先计算在这函数中所有可能会用到变
数大小然后一次性push到堆叠上
例如刚刚的C程式,如果if成立会有a、b、c三个int,不成立会有a、c两个int
而看到的实作则是不管有没有b都先分配空间给他
但以C来说,在if内宣告的变量,他的生命周期应该就只在if内,但如果以这样的实作,
在if内的变量,只要知道他的内存位置,就算在if外也能存取(因为有事先分配空间,
而且没有回收),不太理解为什么要这么做
有没有相关资料是讲这方面细节的,谢谢
(写完后发现C点真的好少.....会不会被删阿orz....)