在 .Net 中分配数组的大 O 时间复杂度是多少?
我猜测如果数组足够小以适合临时段,它应该是 O(1),但是随着 n 变大,找到足够的内存变得更加困难,因此它可能会改变。
此外,大对象堆可能会碎片化,因此如果 n 足够大以使数组适合 LOH,则它可能不会是 O(1)。
最佳答案
大多数人可能都知道,一个新数组将被分配到两个不同的堆中,这取决于它的大小(大小阈值为 85000 字节):
在 LOH 分配的情况下,应该注意额外的隐藏“成本”——这种分配不会在后台 GC 的某些部分发生(因为两者都在空闲列表上运行)。因此,如果碰巧您有很多长时间的后台 GC,LOH 分配将暂停,等待 GC 结束。这显然会给您的线程带来不必要的延迟。
关于c# - 在 .net 中分配新数组的大 O 成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621964/