Vai*_*sht 0 c++ memory arrays new-operator
我正在用 C++ 编写一个简单的堆栈程序。我已经动态分配了数组。我想知道是否有任何方法可以删除(解除分配)数组的特定块。
int *arr = NULL ;
arr = new int[some_size];
.
.
.
.
//now suppose I want to deallocate a specific block
//suppose
int i = 4;
//can I do something like
delete[i] arr;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个愚蠢的问题,但我仍然想知道。谢谢你。
只能解除分配整个分配 - 而不是它的一部分。没有这样的语法delete[i]
。只能将直接从 返回的指针new[]
传递给delete[]
。
但是,您可以实现自己的分配器,该分配器可以处理全局分配器中的单个块,从而提供可以单独释放的较小分配。这是一项高级技术:不适合初学者。它(可能)不是您实现任何程序所需要做的事情。但在某些情况下,如果您知道自己在做什么,它对优化很有用。
我将如何实现我自己的分配器
从全局分配器中分配一些内存 M。
编写一个以字节数为参数的函数。在函数中,使用一些数据结构来跟踪 M 的哪些部分先前已分配。从 M 中选择一个尚未分配的字节范围。在数据结构中将其标记为已分配,返回指向该范围开头的指针。
编写另一个将指针作为参数的函数。将为该分配保留的内存标记为空闲。
更好的是,使用这些函数实现一个符合标准库中分配器概念的类型,以便分配器可以用作标准容器的模板参数。