Programming languages 静态与堆栈动态共享内存

Programming languages 静态与堆栈动态共享内存,programming-languages,computer-science,language-design,Programming Languages,Computer Science,Language Design,我正在阅读第五章语言的概念,发现 静态的缺点:子程序不能共享相同的存储 堆栈动态的优点:没有递归,子程序可以为它们的局部共享相同的内存空间 我认为由于从开始到结束的静态绑定,所有子程序都应该能够看到它并使用它 它 就像我测试的代码一样 #include<iostream> static int test = 0; void func1(){ cout << test++ << endl;} void func2(){ cout << test++

我正在阅读第五章语言的概念,发现

静态的缺点:子程序不能共享相同的存储

堆栈动态的优点:没有递归,子程序可以为它们的局部共享相同的内存空间

我认为由于从开始到结束的静态绑定,所有子程序都应该能够看到它并使用它

就像我测试的代码一样

#include<iostream>
static int test = 0;

void func1(){ cout << test++ << endl;}
void func2(){ cout << test++ << endl;}
int main(){
    func1();
    func2();
}
#包括
静态int检验=0;

void func1(){cout您的程序在专用内存空间中运行。 静态变量具有全局范围。 鉴于此,我假设“子程序不能共享相同的存储”意味着静态变量只实例化一次,并且在程序的整个生命周期中它是同一个对象。 这有几个后果:

  • 如果独立函数需要存储作为其执行的一部分,那么它们不应该处理相同的静态变量,因为它们会影响使用相同变量的其他函数
  • 如果您的函数可以并行运行(例如,在多个处理器上),并且它们处理相同的静态变量,则这些变量将成为共享资源,这意味着必须防止并行访问(这会损坏数据并导致错误行为)
  • 动态分配/堆栈变量使用与程序运行相同的内存空间,但它们可以多次实例化,并且实例彼此独立。例如,如果堆栈变量是在函数内部定义的,则在函数输入时分配,在函数退出时释放。如果再次输入函数,则新变量将创建ble。它的内存空间相同,但在此空间中的堆栈帧不同