使用堆分配数组的常用方法是:
SomeType * arr = new SomeType[15454];
//... somewhere else
delete [] arr;
Run Code Online (Sandbox Code Playgroud)
为了delete [] arr
使C运行时必须知道与指针相关的内存缓冲区的长度.我对吗?
所以原则上应该可以以某种方式访问信息?可以使用某个库访问吗?我是在想.我知道它不是语言的核心部分,因此它将取决于平台.
你做对了.信息就在那里.但是没有标准的方法来获得它.
如果您正在使用Windows,则有一种_msize()
方法可能会为您提供内存块的大小,但它可能不一定准确.(报告的内存块大小可以向上舍入到最近的较大对齐点.)请参阅MSDN - _msize
如果这是你真正必须拥有的东西,你可以试试你的运气,重写new
,分配稍大的内存块,在开头存储它的大小,并在大小后返回一个指向字节的指针.然后你可以编写自己的msize()
返回该大小.当然你还需要覆盖delete
.但这太麻烦了,如果可以,最好避免它.如果你这样走,你会发现只有痛苦.
信息存在.遗憾的是,标准未指定应如何分配动态内存,也未指定如何提取已分配块的大小.
这意味着每个实现都可以做到它想要的.经典方式是:
但是,由于没有指定任何内容,您将不得不深入了解实现的内部.通常,阅读malloc/free源是最好的信息来源.
归档时间: |
|
查看次数: |
244 次 |
最近记录: |