给变量分配内存单元是在什么时候进行的?

给变量分配内存单元是在什么时候进行的?谭浩强 第三版 219页 第十章 说:在对程序编译时,系统会给这个变量分配内存单元。而且还不止说了一遍。
可是函数中的变量,在程序运行过程中调用该函数时才开辟内存空间啊?????怎么前后矛盾啊?
麻烦高手解释一下?

这个涉及到局部变量还是全局变量的问题,函数中的变量属于局部变量,所以再调用到之后才开辟内存空间,但局部变量所在函数调用完毕,局部变量就被取消了,然后所占内存就被收回了。 而全局变量由于作用域很广,一旦定义,编译器就会分配内存,程序运行期间这块内存单元一直有效,直到整个程序结束才由系统收回内存~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-29
编译的时候,把代码编译成obj的时候,就相当于执行了函数一次,不然怎么知道函数正确还是错误?编译完成后,关闭窗口,给变量分配的内存单元会释放。下次程序运行的时候,会再次给变量分配内存单元。本回答被网友采纳
第2个回答  2012-09-29
编译和运行,是两个不同的概念。

编译的时候,常量变量是在这个时候就决定了大小,如固定的数值,字符串。
char *s="hello";

函数中的变量是局部变量,是在运行的时候动态申请的,如果函数中也用到了常量变量,大小那也是在程序编译的时候产生的。由程序一开始运行就直接申请到内存中,在整个进程中都有效。
第3个回答  2012-09-29
编译时只是把程序转换成机器能识别的二进制,是静态的文件,怎么会分配内存单元呢?
只有当程序运行的时候才会分配内存单元
谭浩强的书很烂,表述不准确,代码页不注意风格,纯粹毒害新手
建议你看C Primer Plus
第4个回答  2012-10-07
在主程序中变量分配内存单元是在对程序编译时完成,函数中的变量空间分配是在调用该函数时完成。
相似回答