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