gpt4 book ai didi

c++ - 我可以像 `delete[]` 那样获取动态分配数组的大小吗?

转载 作者:行者123 更新时间:2023-11-30 02:17:20 24 4
gpt4 key购买 nike

我想知道 delete[] 是如何知道动态分配数组的大小的,我找到了 this问题(还有 Microsoft 论坛上的 this 问题,但答案是相似的)。结果是 answer

This is usually stored in a "head" segment just before the memory that you get allocated.

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

Forcing the allocator to store the requested size (so that you wouldn't need to pass the array size yourself) might be a small encumbrance, but it could have performance impacts on conceivable allocator designs

对我来说,考虑到无论如何 delete[] 都应该可以访问大小,这并不是很有说服力。

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

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

You can use the Microsoft-specific function _msize() to get the size of a dynamically allocated array from the pointer, even when it is passed to another function than the one which did the allocation.

最佳答案

如果您使用开源库,那么可以!只需查找来源,弄清楚如何去做。

但这仍然是一个坏主意,因为没有任何保证:实现可能随时更改,并且不能保证即使在 Unix 和 Linux 之间也是可移植的。这个数字也可能太大,因为分配更多可能是有利的,例如对齐。这也是不必要的:当您新建一个空间时,您就知道它的大小。你可以传递它,或者将它存储在你控制的某个地方。这并不比通过 malloc 的实现查找它更糟糕。

关于c++ - 我可以像 `delete[]` 那样获取动态分配数组的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53725422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com