【发布时间】:2011-07-12 18:26:35
【问题描述】:
static 存储在编译时决定。但是,考虑一下我们在函数中有很多延迟初始化的场景:
void foo ()
{
static int a[1000];
}
我在这里讨论的不是编码实践,而是技术方面。由于执行了许多 其他函数,如 foo(),因此许多 static 变量将被引入数据段。
在为数据段分配空间时,编译器是否也会在帐户中进行延迟初始化。如果“否”,那么它会在代码执行时导致运行时出现分段错误吗? (当template 方法中有很多static 数据时,更有可能发生)。
【问题讨论】:
-
选择一种语言。 C 和 C++ 是不同的。
-
@Tomalak,这对他们俩都适用。
-
@Tomalak 他的示例显然很好地属于 C 和 C++ 的公共子集。作为公共子集的一部分,人们希望两种情况下的答案都是相同的。
-
@iammilind:更多的观众是无关紧要的。重要的是它被正确标记,C 或 C++ 都没有任何数据段的概念,如果这样的东西甚至不再存在,它是一个特定于平台的东西,所有语言的所有编译器都需要它。
-
@DeadMG:但他们确实定义了静态持续时间对象的语义。
标签: x86 segmentation-fault lazy-initialization data-segment