Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 初始化数组,可能会产生不可预见的后果?_Arrays_String_C++11_Cin - Fatal编程技术网

Arrays 初始化数组,可能会产生不可预见的后果?

Arrays 初始化数组,可能会产生不可预见的后果?,arrays,string,c++11,cin,Arrays,String,C++11,Cin,我最近观察到,通过初始化一个数组,垃圾值被空终止符所取代。这似乎无关紧要,但在一个大型程序中,我认为花费资源清理一个数组并不可取。现在要明确的是,我不编写大型程序,这就是为什么我要问,我只是一个初学者。然而,如果使用得当,只要始终有一个显式放置的终止符,垃圾值就完全可以了 那么,我是否应该把它作为圣经来始终初始化我的数组,或者我应该考虑是否可以让垃圾值保持不变? 这是因为它是C++ SpEC1,Po.1.62的一部分,它讨论了使用字符串文字初始化字符(或宽字符)数组的行为: 如果初始值设定项少于

我最近观察到,通过初始化一个数组,垃圾值被空终止符所取代。这似乎无关紧要,但在一个大型程序中,我认为花费资源清理一个数组并不可取。现在要明确的是,我不编写大型程序,这就是为什么我要问,我只是一个初学者。然而,如果使用得当,只要始终有一个显式放置的终止符,垃圾值就完全可以了


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

这是因为它是C++ SpEC1,Po.1.62的一部分,它讨论了使用字符串文字初始化字符(或宽字符)数组的行为:

如果初始值设定项少于数组元素,则未显式初始化的每个元素应 零初始化(11.6)

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

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

在这种情况下,由于必须初始化整个存储,因此专门用零初始化它不需要额外的成本


1我找不到一份好的官方规范的非付费副本。此引文摘自a,第228页(每页页脚)或第242页(每PDF页码)。

谢谢您的详细回答!但这个可执行的“图像”是什么,这不是我以前努力学习过的术语,我试着在维基百科上找到它,但我甚至不确定我在寻找什么。我对学习程序体系结构非常感兴趣,当然还有计算机,所以我真的不想错过任何东西。没有一个真正方便的地方可以学习你所知道的一切吗?@GoodBoy可执行映像只是操作系统运行的文件。我的工作基于Linux术语/概念;在Linux中,
g++
输出的是
a.out
文件(或简单的可执行文件)。对于Windows,它应该是.exe文件,但我不确定Windows是否使用相同的映射/页面复制来初始化内存段。我还没有机会深入阅读它,但可能会透露一些有关Windows如何做到这一点的更多信息。只需注意一下标准:ISO很小心为官方标准付费,但你可以在发布的内容中找到,详细跟踪开发并生成最新版本。对于初学者来说,乍一看可能有点吓人,但它提供了一个有用的方法。