编译时间和运行时内存分配之间的时差

时间:2016-06-17 17:25:34

标签: c algorithm ram

我在某处读到了分配k个字的内存所花费的时间是O(k),我想知道这个时间对于运行时和编译时内存分配都是一样的,意味着想要知道{{ 1}}和int A[100];需要相同的时间或不同的

1 个答案:

答案 0 :(得分:0)

动态分配内存可能需要O(k)时间。这取决于分配器(malloc)或其调用的函数之一是在返回之前初始化内存。例如,如果malloc调用Windows LocalAlloc函数从操作系统获取内存,它可以传递LMEM_ZEROINIT标志以将所有字节初始化为0。

出于安全原因,某些操作系统内存分配器会自动使用零启动内存。 malloc的某些实现将使用已知模式(如0xDEADBEEF)初始化内存,尤其是在调试模式下。这样,如果您读取核心转储,您可以查看您的程序是否正在访问已分配但未由程序初始化的内存。

所以你没有问过的明确问题的答案是,是的,可能的,甚至可能是k字节的动态内存分配需要O (k)时间。