0

我读语言第5章的概念,并发现静态VS堆栈动态共享内存

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

stack-dynamic的优点:没有递归,这不是没有价值的。子程序可以为他们的本地人共享相同的内存空间。

,我认为这是由于从静态绑定开始终端,所有的子程序应该能看到它,使用

喜欢我的代码测试

#include<iostream> 
static int test = 0; 

void func1(){ cout << test++ << endl;} 
void func2(){ cout << test++ << endl;} 
int main(){ 
    func1(); 
    func2(); 
} 

和堆栈动态分配每次执行功能,如被推入堆栈(LIFO),因此它们在不同的空间空间中,因此它们是

我不知道我心中的错误在哪里?

Thx提前。

回答

1

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

  1. 如果你的独立功能需要存储作为其执行的一部分,他们不应该针对同一个静态变量,因为它们会影响使用相同的变量等功能。
  2. 如果您的函数可以并行运行(例如,在多个处理器上)并且它们处理相同的静态变量,则这些变量将成为共享资源,这意味着它必须受到保护,避免并行访问(这可能会破坏数据并导致错误行为) 。

动态分配/堆栈变量使用程序运行的相同内存空间,但它们可以多次实例化,并且实例彼此独立。例如,如果函数中定义了堆栈变量,它将在函数入口时分配并在函数退出时释放。如果再次输入该函数,则将创建新变量。它的内存空间是,但是在这个空间中有不同的堆栈帧

+0

Thx!很清楚,很好! –