Sla*_*ish 4 c multithreading memory-management
如果我在声明并初始化的函数外的文件中有变量:
static int i = 42;
Run Code Online (Sandbox Code Playgroud)
变量i存储在哪里?它是数据部分吗?
如果我在函数外部的文件中有变量,则声明但未初始化为:
static int j;
Run Code Online (Sandbox Code Playgroud)
变量j存储在哪里?是BSS吗?
我假设默认情况下j将被初始化为零,所以如果我稍后会这样做:
j = 1;
Run Code Online (Sandbox Code Playgroud)
j现在将存放在哪里?
现在对我真正感兴趣的部分是:所有线程都可以使用静态文件范围变量吗?
我问,因为堆当然可用于所有线程,但每个线程都有自己的堆栈,之前我曾假设静态文件范围变量放在堆栈上,就像在函数内声明的变量一样.
出于好奇 - 静态文件范围变量的相同存储规则是否也适用于全局变量?
现在对我真正感兴趣的部分是:所有线程都可以使用静态文件范围变量
是的,所有线程都可以访问整个地址空间.
更有趣的是,物体不需要具有静态存储的方式i和j你的例子做.如果在线程A的堆栈上有一个对象并且以某种方式设法将其地址传递给线程B,则B可以毫无问题地访问它.
为全局变量做静态文件范围变量的相同存储规则吗?
这两者都具有所谓的"静态存储".在任何函数之外声明的变量的上下文中,static只是使其在其翻译单元之外不可见.