拆分malloc内存空间

时间:2010-12-06 15:07:37

标签: c++ split malloc

我正在使用MS VS 2010,C ++,非托管。如果可能的话,我想拆分分配的区域。例如,假设我在内存中分配了1KB的空间:

void* space = malloc(1024);

之后,我决定将此块作为单独的512B和512B空间:

space1 = 512B and space2 = 512B

最后当我想摆脱这些空间时,我想分开释放它们:

free(space1);
free(space2);

这可能没有重新分配/扩展/缩小内存吗?

谢谢大家..

3 个答案:

答案 0 :(得分:1)

不,你不能单独释放它们,因为malloc()只保留一份必要的簿记数据,所以它只能释放一个块。你必须编写自己的malloc / free包装器。

答案 1 :(得分:1)

简而言之:您必须在malloc / new上编写自己的内存分配器。

较长版本: 由于内存分配器实现不同,因此无法对其内部数据结构进行可移植修改,以跟踪分配的和空闲的块。他们的界限。

例如,有些技术会在每个内存块之前添加少量数据。您无法拆分此类块,因为额外的簿记数据会扩大块的大小。

其他技术将管理数据从块外部放置,例如通过位图,链接列表等。你可能会有更多的运气。

同样,你最好自己编写分配器。

更好的是,如果可能的话,尝试寻找替代方法来管理你的记忆。也许池分配器更像是你需要的东西。

答案 2 :(得分:0)

您可以将Windows API用于堆:http://msdn.microsoft.com/en-us/library/aa366711(VS.85).aspx

HeapAlloc()相当于malloc。主要区别在于接收另一个参数:要使用哪个堆。可以使用HeapCreate创建这些堆,您可以为它们保留空间。