当前位置:首页 > 内存 > 正文

函数是在哪个内存区运行

  • 内存
  • 2024-08-17 01:18:46
  • 2995

一、C++函数在内存中如何存储它存储在代码部分。
如果有函数指针,肯定会占用内存。
二、一个函数内部定义的变量称为()它存放于()存储区,在函数外部定义的变量称为(),它存放于()存储区

在函数内部定义的变量称为局部变量或内部变量,它们存储在动态存储区中。在函数外部定义的变量称为外部变量或全局变量,它们存储在静态存储区域中。

外部变量是在函数外部定义的全局变量。它的范围从变量的定义延伸到程序文件的末尾。在这个区域中,全局变量可以被各种函数引用。外部变量在编译时分配在静态存储中。

局部变量的作用域是定义变量的函数,或者定义变量的复合语句。局部变量的生命周期是从调用函数的那一刻开始计算的,直到函数返回到调用它的地方为止。



扩展信息

全局变量从程序立即占用内存,并且在程序的整个运行过程中可以随时访问。当程序退出时,内存被释放。相应的局部变量在进入语句块时接收内存,并且只能被语句块内的语句访问。退出语句块时内存被释放并且不再有效。

局部变量定义后不会自动初始化,除非程序员指定一个初始值。除非程序员指定初始值,否则全局变量会自动初始化为零。在同一个源文件中,全局变量和局部变量可以具有相同的名称。全局变量不影响局部变量的作用域。

有时需要使用extern在其他文件中声明全局变量,以扩展全局变量的作用域。全局变量也可以声明为静态,这样它们就不能被其他文件引用。在B语言、C语言以及其他一些派生语言(如C++)中,外部变量就是外部变量。

链接来源:-局部变量

链接来源:-外部变量


三、在一个函数调用时,被调用函数的形参被参数分配在内存的静态数据区么我不太明白这个问题,所以我建议你再补充一些问题。
你清楚5个最大的内存分区吗?如果您不确定,请检查参考材料的链接。
静态数据区和静态分配内存的概念并不相同。
如果你问:调用函数时,参数会分配在内存的静态数据区
肯定不是。
因为静态数据区的数据是在编译阶段就分配的,所以调用时静态数据区不会有这样的重新分配。
如果你问:函数调用时形参会静态分配
一定会按值调用吗?绝对不是通过引用
如果你问:调用函数时,参数会分配在内存的堆数据中吗?
一般不会。
如果是传值调用,那么子函数的隐藏参数是调用时自动复制实参生成的临时变量,只会在栈空间中。
如果通过引用调用,则不会有临时变量,直接调用实际参数,不会向内存申请数据空间。
如果你问,形参可以是静态数据区的数据吗?
有可能在引用调用时,可以将静态数据区数据作为参数传递。