2010-12-06 57 views
1

我正在使用MS VS 2010,C++,非托管。如果可能,我想分割分配的区域。例如,让我们说我被分配在内存1KB的空间:split malloc mem space

void* space = malloc(1024); 

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

space1 = 512B and space2 = 512B 

最后当我想摆脱这些空间我想单独释放他们:

free(space1); 
free(space2); 

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

谢谢大家..

回答

1

不,你不能单独释放他们,因为的malloc()将只保留一个必要的簿记数据的副本,因此它只能免费一个大块。你将不得不编写你自己的malloc/free包装。

+0

这很快:)我希望有这个解决方案..好吧,这将等到;我开始写内存管理器比.. thnx。 – MCA 2010-12-06 15:13:43

+0

@MCA,习惯上接受你喜欢的答案,使用它收到的投票数下方的复选标记。由于DeadMg的答案似乎是您决定满足您的直接需求的答案,因此您应该接受它。 – 2010-12-06 15:19:06

1

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

较长版本: 由于内存分配器实现方式不同,因此无法轻松修改其内部数据结构,以便跟踪分配的空闲块和空闲块的边界&。

例如,有一些技术可以为每个存储块添加少量数据。您无法分割这样的块,因为额外的簿记数据会扩大块的大小。

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

再一次,你会更好地编写自己的分配器。

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