我可以像`delete []`一样获得动态分配数组的大小吗?

时间:2018-12-11 13:44:03

标签: c++ portability dynamic-arrays

我想知道delete[]如何知道动态分配的数组的大小,我发现了一个this问题(以及Microsoft论坛上的一个this问题,但是答案都差不多) 。原来answer

  

这通常存储在分配内存之前的“ head”段中。

因此,确切的细节是特定于实现的。
在该答案下,有一条评论提出了疑问,为什么程序员无法获得这条非常有用的信息,从而迫使我们传递表示大小的变量。评论得到的答案是

  

强制分配器存储请求的大小(这样您就不必自己传递数组大小了)可能会有点麻烦,但可能会对可能的分配器设计产生性能影响

对我来说,考虑到delete[]应该可以访问该大小,这并不是很令人信服。

我的问题:(对于程序员)是否有可能以某种方式获取大小?

我知道有一种Microsoft特殊的方式(正如前面提到的MS论坛中提到的那样),但是我追求某种标准化的方式。

  

您可以使用Microsoft特定的函数_msize()来   从中获取动态分配的数组的大小   指针,即使将其传递给另一个函数   进行分配的人。

2 个答案:

答案 0 :(得分:2)

如果您使用开源库,那么可以!只需查找源代码,弄清楚该怎么做。

但是,这仍然不是一个好主意,因为不能保证:实现可能随时更改,甚至不能保证在Unix和Linux之间可移植。该数字也可能太大,因为分配更多(例如对齐)可能是有利的。 这也是没有必要的:new时您知道大小。您可以通过它,也可以将其存储在您控制的地方。这并不比在malloc的实现中查找它更糟糕。

答案 1 :(得分:1)

我的结论是:
数组的大小可能存储在内存中,但不一定如此。还有其他方法可以实现所需的行为,每种方法都有其自身的取舍,ISO专门为编译器作者提供了选择的自由,以便他们可以根据需要进行优化。
也就是说,到目前为止,还没有一种标准化的方法来获取动态分配的数组的大小。