我正在阅读语言ch 5的概念并找到
静态缺点:子程序不能共享相同的存储空间。
stack-dynamic的优势:没有递归,它可能与其本地人共享相同的内存空间。
我认为由于从开始到终端的静态绑定,所有子程序都应该可以看到并使用
它
像我测试的代码一样#include<iostream>
static int test = 0;
void func1(){ cout << test++ << endl;}
void func2(){ cout << test++ << endl;}
int main(){
func1();
func2();
}
和堆栈动态分配每次执行函数,就像是推送到堆栈(LIFO),所以他们
处于不同的空间。
我不知道我的想法中的错误在哪里?
提前谢谢。答案 0 :(得分:1)
您的程序在专用内存空间中运行。 静态变量具有全局范围。 鉴于此,我认为“子程序不能共享相同的存储”意味着静态变量只被实例化一次,并且在程序的整个生命周期内它是同一个对象。 这有几个后果:
动态分配/堆栈变量使用程序运行的相同内存空间,但它们可以多次实例化,并且实例彼此独立。例如,如果在函数内部定义了堆栈变量,则在函数入口处分配它,并在函数退出时释放。如果再次输入该函数,将创建新变量。它是相同的内存空间,但在此空间中有不同的堆栈帧。