静态存储(主要是数据段)会导致分段错误吗?

iam*_*ind 2 x86 segmentation-fault lazy-initialization data-segment

static存储在编译时决定.但是,请考虑我们在函数中进行大量延迟初始化的情况:

void foo ()
{
  static int a[1000];
}
Run Code Online (Sandbox Code Playgroud)

我不是在讨论这里的编码实践,而是讨论技术方面.由于执行了许多其他类似 foo()功能,static因此将在数据段上引入这些许多变量.

为数据段分配空间时,编译器是否也会在帐户中进行延迟初始化.如果'否'那么,它会在代码执行时在运行时导致分段错误吗?(当方法static内部有大量数据时更有可能发生template).

Jam*_*nze 5

仅仅因为初始化是懒惰的,分配不是.该标准要求所有静态变量(包括局部变量)在程序启动之前初始化为零.实际上,静态意味着(在这种情况下):变量的空间在程序的整个生命周期中都存在.