gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:46 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com