写这篇总结的缘由仅仅出于巧合,五一前帮一位同学看51的程序,在查看汇编代码的时候(事实上我当时的汇编知识基本都还给了老师),无意中问起我“某个局部变量的声明怎么没有对应的汇编语句”,我没有答出来。当时也只是把它当做一种常识给记了下来,平时不论还是在DSP、16位的单片上还是PC平台上编写c程序,由于程序不是很复杂且芯片资源通常足够,因此很少会考虑内存分配、堆栈方面的内容。这几天在看《Linux c 一站式编程》这本书关于变量内容的时候突然想起这个问题,顿时觉得很有必要把深究一下。
因为网络账号还没充钱的缘故,ubuntu系统还不能及时升级,因此在VC平台下做了以下相关试验。代码如下:
int main(void)
{
int d;
int f = d+1;
d = 1;
d = hello(5,10);
return 0;
}
对应的汇编代码如下:
16: int main(void)
17: {
00410960 push ebp
00410961 mov ebp,esp
00410963 sub esp,48h
00410966 push ebx