初始化数组,潜在的不可预见的后果?

Initializing arrays, potentially unforseen consequences?

我最近观察到,通过初始化数组,垃圾值 所有 都被空终止符替换了。这似乎无关紧要,但在大型程序中,我认为花资源清理数组不是更好的选择。现在要明确一点,我不编写大型程序,这就是我问的原因,我只是一个初学者。但是,如果使用得当,只要始终有明确放置的终止符,垃圾值就完全没问题。

那么,我是应该将始终初始化我的数组作为圣经,还是应该考虑是否可以让垃圾值保持不变?

这是因为它是 C++ 规范1, §11.6.2 的一部分,其中讨论了使用字符串文字初始化字符(或宽字符)数组的行为:

If there are fewer initializers than there are array elements, each element not explicitly initialized shall be zero-initialized (11.6).

无论如何,关于计算成本:

当您在全局(而非函数范围)中初始化数组时,它通常会位于可执行文件的 .data 段中,并通过直接从可执行映像复制内存页面而不是指令来初始化在初始化期间一次戳内存字节。在加载程序时复制页面,或者它是 demand-paged,再次以页面级别的粒度。

在这种情况下,由于必须初始化整个存储,因此使用零专门初始化它不会产生额外成本。

1 我找不到好的非付费版官方规范。此引用摘自 draft,第 228 页(每页页脚)或第 242 页(每 PDF 分页)。