gpt4 book ai didi

c++ - 为什么我们可以删除数组,但不知道 C/C++ 中的长度?

转载 作者:IT老高 更新时间:2023-10-28 22:00:34 26 4
gpt4 key购买 nike

为什么我们可以删除动态分配的数组,但我们无法找出它们有多少元素?我们不能把内存位置的大小除以每个对象的大小吗?

最佳答案

在 C++ 中,两者都...

  • new、new[] 或 malloc 调用请求的大小(字节),以及
  • new[] 动态分配中请求的数组元素数

...是标准不需要以编程方式提供的实现细节,即使内存分配库必须记住前者而编译器必须记住后者,以便它可以在正确数量的元素上调用析构函数。

有时编译器可能会看到有一个固定大小的分配,并能够可靠地将其与相应的解除分配相关联,因此它可以生成为这些编译时已知值定制的代码(例如内联和循环展开),但在复杂的用法(以及在处理外部输入时)编译器可能需要在运行时存储和检索 # 元素:可能会为 #element 计数器放置足够的空间 - 例如 - 紧接在为数组内容返回的地址之前或之后, delete[] 知道这个约定。在实践中,编译器可能会选择始终在运行时处理此问题,只是为了一致性带来的简单性。存在其他运行时可能性:例如# 元素可能源自对满足分配的特定内存池的一些了解以及对象大小。

该标准不提供编程访问以确保实现不受他们可能使用的优化(速度和/或空间)的限制。

(内存位置的大小可能大于请求的元素数量所需的确切大小 - 该大小由内存分配库记住,它可能是独立于 C++ 编译器的黑盒库)。

关于c++ - 为什么我们可以删除数组,但不知道 C/C++ 中的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3994950/

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