C语言调用函数时会为函数分配自己的函数空间吗?

如果一个函数里有局部变量,C语言对这个函数的多次调用不会相互影响吧?
——> C语言调用函数时会为函数分配自己的函数空间吗?

C语言每一次函数调用,编译器都会为这个函数调用分配一段空间,这段空间用来存放该函数中的所有局部变量和调用其它函数时需要传递的参数的副本。每一次调用这个函数,这段空间都会重新分配,函数返回后这段空间就被释放了,所以重复调用多少次都不会影响的。所有的这些函数调用时候分配的内存都是在线程的栈上的。

顺便说一下,我觉得楼上的回答是不对的: 每个线程都只会访问自己调用的函数中的局部变量的,访问局部变量是不会存在多线程问题的。会存在多线程问题的肯定不是局部变量,有可能是局部变量指向的其它可共享的对象(例如:堆对象......),或者在函数中访问了全局对象,类的成员变量等,这些并不是局部变量。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-07
C语言调用函数时,是会为函数分配临时函数空间,但函数的局部变量生命周期是只在函数运行时,一旦完成函数调用局部变量就被释放了。所以函数多次调用是在不同的函数空间调用,不会相互影响。本回答被网友采纳
第2个回答  2020-06-02
不分配的。
进入函数压栈;退出函数出栈
第3个回答  2018-07-07
声明成可重入函数,才不会影响递归调用。追问

不是递归调用啊!
我就是好久没深入使用,对C语言基本的语法功能产生了疑惑!
你如果知道的话请告诉我一下,省的我去翻书了^_^
问题:就是C语言是不是每一次调用函数时都会为这个函数分配一个独立的函数空间,这个空间的局部变量不会与外部相互影响?

追答

我已经回答过了:不一定。你要考虑多个线程分别调用同一个函数,或者同一线程里递归调用同一个函数等等这些极端情况。

相似回答