C ++ Flat Array与多维数组内存占用

时间:2013-07-08 02:24:14

标签: c++ memory memory-management destructor

在C ++中,delete[]运算符删除数组。它能够访问数组的长度,因为分配器会跟踪它。

这是否意味着扁平的一维数组占用的内存少于多维数组?

更具体地说,如果我分配Object** c,分配器是否存储第一维和第二维的长度,同时分配Object* c(但具有与两者相同数量的元素 - 维数组)只存储一个长度?

1 个答案:

答案 0 :(得分:1)

如果你这样做:

Object **c = new Object*[n];
for (size_t i=0; i!=n; ++i) {
  c[i] = new Object[m];
}

然后它通常需要比这样做更多的内存:

Object *c = new Object[n*m];

只是你说的理由。

每个内存分配都有一定的开销。除了需要保留元素数量之外,内存分配器本身也有开销。每行的所有额外指针也需要更多的内存。

请注意,可能会出现这种情况,即分解它会占用更少的内存。如果您的堆碎片化,那么找到一大块内存可能需要从操作系统分配更多内存,而如果您的阵列被分成更小的碎片,那么这些碎片可能能够适应碎片堆的漏洞。