首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++不会告诉您动态数组的大小。但是为什么呢?

C++不会告诉您动态数组的大小。但是为什么呢?
EN

Stack Overflow用户
提问于 2016-04-07 16:48:29
回答 2查看 7.3K关注 0票数 63

我知道在C++中无法获得动态创建的数组的大小,例如:

int* a;
a = new int[n];

我想知道的是:为什么?人们只是在C++的规范中忘记了这一点,还是有技术原因呢?

信息不是存储在某个地方吗?毕竟,命令

delete[] a;

似乎知道它需要释放多少内存,所以在我看来,delete[]有某种方法可以知道a的大小。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-08 04:50:16

您通常会发现,内存管理器只会分配特定倍数的空间,例如64字节。

因此,您可以请求新的int4,即16字节,但是内存管理器将为您的请求分配64字节。要释放这个内存,它不需要知道您请求了多少内存,只需要知道它已经为您分配了一个64字节的块。

下一个问题可能是,它可以不存储请求的大小吗?这是一个额外的开销,并不是每个人都愿意支付。例如,Arduino Uno仅具有2k的RAM,并且在该上下文中,用于每次分配的4字节突然变得重要。

如果您需要该功能,那么您可以使用std::vector (或等效的),或者您可以使用更高级的语言。C/C++的设计目的是使您能够以尽可能少的开销工作,这是一个例子。

票数 2
EN

Stack Overflow用户

发布于 2016-04-07 20:22:23

你说得对,系统的某些部分必须知道一些关于大小的信息。但是,内存管理系统(比如malloc/free)的应用编程接口可能不包括获取这些信息,并且您请求的确切大小可能不知道,因为它可能已经四舍五入了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36471101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档