char buffer[1000] = {0};
Run Code Online (Sandbox Code Playgroud)
这会将所有1000个元素初始化为0.这是不变的时间吗?如果没有,为什么?
似乎编译器可以根据以下事实将其优化为O(1):
请注意,答案对于任何编译器都是通用的,但我特别感兴趣的是在Windows上的MSVC编译器(任何版本)上测试的答案.
奖励积分:关于此细节的任何文章,白皮书等的链接将不胜感激.
如果它在一个函数内部,不,它不是恒定的时间.
你的第二个假设是不正确的:
"数组位于堆栈上,这意味着可执行文件可能包含可执行文件数据段(在Windows上)中的这些数据,作为已填充0的数据块."
堆栈尚未填充零.它充满了以前函数调用的垃圾剩余.
所以不可能这样做,O(1)
因为它必须将其归零.
它可以是O(1)仅作为全局变量.如果它是局部变量(在堆栈上),则为O(n),其中n是数组的大小.
堆栈是一个共享内存,你需要主动为零,总是希望在那里有1000个零.您定义的数组未实现为指向数据段的指针,它是堆栈上的1000个变量,必须在O(1000)中初始化.
编辑:Dani是对的,我必须修改我的声明:如果它是一个全局数组,它会在程序启动时初始化.它也是O(n).