我知道在C++中无法获得动态创建的数组的大小,例如:
int* a;
a = new int[n];
我想知道的是:为什么?人们只是在C++的规范中忘记了这一点,还是有技术原因呢?
信息不是存储在某个地方吗?毕竟,命令
delete[] a;
似乎知道它需要释放多少内存,所以在我看来,delete[]
有某种方法可以知道a
的大小。
发布于 2016-04-08 04:50:16
您通常会发现,内存管理器只会分配特定倍数的空间,例如64字节。
因此,您可以请求新的int4,即16字节,但是内存管理器将为您的请求分配64字节。要释放这个内存,它不需要知道您请求了多少内存,只需要知道它已经为您分配了一个64字节的块。
下一个问题可能是,它可以不存储请求的大小吗?这是一个额外的开销,并不是每个人都愿意支付。例如,Arduino Uno仅具有2k的RAM,并且在该上下文中,用于每次分配的4字节突然变得重要。
如果您需要该功能,那么您可以使用std::vector (或等效的),或者您可以使用更高级的语言。C/C++的设计目的是使您能够以尽可能少的开销工作,这是一个例子。
发布于 2016-04-07 20:22:23
你说得对,系统的某些部分必须知道一些关于大小的信息。但是,内存管理系统(比如malloc
/free
)的应用编程接口可能不包括获取这些信息,并且您请求的确切大小可能不知道,因为它可能已经四舍五入了。
https://stackoverflow.com/questions/36471101
复制相似问题