我想知道如何delete[]
知道动态分配数组的大小,并且我发现this问题(还有this微软论坛上的问题,但答案是相似的)。事实证明answer is
它通常存储在您分配的内存之前的“头”段中。
因此,确切的细节是特定于实现的。
在该答案下,其中一条评论询问为什么程序员无法获得这一非常有用的信息,迫使我们传递表示大小的变量。评论得到的答案是
强制分配器存储请求的大小(这样您就不需要自己传递数组大小)可能是一个小负担,但它可能会对可想象的分配器设计产生性能影响
对我来说,考虑到大小应该可以访问,这并不是很有说服力delete[]
无论如何。
我的问题:(对于程序员来说)是否有可能以某种方式检索大小?
我知道微软有一种特殊的方式(正如前面提到的微软论坛中指出的那样),但我追求的是标准化的东西。
您可以使用 Microsoft 特定函数 _msize() 来
获取动态分配数组的大小
指针,即使它被传递给另一个函数而不是
进行分配的那个。
如果您使用开源库,那么是的,您可以!只需查找来源,弄清楚如何进行即可。
但这仍然是一个坏主意,因为没有任何保证:实现可能随时改变,并且不能保证即使在 Unix 和 Linux 之间也是可移植的。该数字也可能太大,因为分配更多可能是有利的,例如为了对齐。
这也是不必要的:当你new
一个你知道大小的空间。您可以直接传递它,或者将其存储在您控制的某个地方。这并不比通过 malloc 的实现来查找更糟糕。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)