c++ - 在常数时间内初始化 C++ 数组

标签 c++ visual-c++

char buffer[1000] = {0};

这将所有 1000 个元素初始化为 0。这是常数时间吗?如果不是,为什么?

根据以下事实,编译器似乎可以将其优化为 O(1):

  1. 数组大小固定,编译时已知
  2. 该数组位于堆栈上,这意味着可执行文件可能将此数据包含在可执行文件的数据段中(在 Windows 上)作为已经填充了 0 的数据 block 。

请注意,答案对任何编译器都是通用的,但我对在 Windows 上的 MSVC 编译器(任何版本)上测试过的答案特别感兴趣。

奖励积分:非常感谢链接到有关此细节的任何文章、白皮书等。

最佳答案

如果它在函数内部,不,它不是常数时间。

您的第二个假设不正确:

“该数组位于堆栈上,这意味着可执行文件可能将此数据包含在可执行文件的数据段中(在 Windows 上)作为已经填充了 0 的数据 block 。”

堆栈尚未填满零。它充满了之前函数调用遗留下来的垃圾。

所以不可能在 O(1) 中完成它,因为它必须将它归零。

关于c++ - 在常数时间内初始化 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718240/

相关文章:

c++ - 多个 return 语句与多个 goto 语句 : which one would be preferable?

c++ - ATM 机编程挑战

c++ - 我可以让共享库构造函数在重定位之前执行吗?

visual-c++ - 在不同嵌套级别的多个项目中包含公共(public)资源(Visual C++)

c++ - #include 指令 : relative to where?

c++ - 多个互斥体上的 Windows 同步

c# - Visual Studio 2012/VS11 是否有自定义语言加载项?

c++ - 为什么写入我的字符串不起作用?

c++ - 返回时奇怪的 C++ 引用失效

c++ - 为什么空基类优化(EBO)在MSVC中不起作用?