C++ 分割malloc-mem空间

C++ 分割malloc-mem空间,c++,split,malloc,C++,Split,Malloc,我使用MS vs 2010,C++,非托管。如果可能的话,我想分割分配的区域。例如,假设我在内存中分配了1KB的空间: void* space = malloc(1024); 后来,我决定将此块作为512B和512B空间分开: space1 = 512B and space2 = 512B 最后,当我想摆脱这些空间时,我想分别释放它们: free(space1); free(space2); 在不重新分配/扩展/收缩内存的情况下,这是可能的吗 谢谢大家。不,您不能单独释放它们,因为mall

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

void* space = malloc(1024);
后来,我决定将此块作为512B和512B空间分开:

space1 = 512B and space2 = 512B
最后,当我想摆脱这些空间时,我想分别释放它们:

free(space1);
free(space2);
在不重新分配/扩展/收缩内存的情况下,这是可能的吗


谢谢大家。

不,您不能单独释放它们,因为malloc()将只保留一份必要簿记数据的副本,因此它只能释放一个区块。您必须编写自己的malloc/free包装程序。

您可以使用Windows API处理堆:


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

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

较长版本: 由于内存分配器的实现不同,因此无法通过可移植的方式修改其内部数据结构,以跟踪已分配和空闲块及其边界

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

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

同样,您最好编写自己的分配器


更好的是,如果可能的话,试着找到其他方法来管理你的记忆。也许池分配器更适合您的需要。

这很快:)我希望有一个解决方案。。那么这要等到,;我开始写内存管理器,而不是。。thnx@MCA,通常情况下,接受您喜欢的答案时,请使用低于所获得票数的复选标记。由于DeadMg的答案似乎是您决定满足您当前需要的答案,您应该接受它。哦,对不起。。我对这个网站有点陌生。。我没有注意到我应该选择一个答案。@MCA:为什么每个人和他们的兄弟都想重新编写内存管理器。它花了将近40年的时间才达到目前的状态(而且效率很高)。你不可能做得更好(除非你有一个40年的博士研究生团队),所以不要尝试。因为windows api没有做我想做的。我本可以分割分配的内存。实际上我需要更高的性能,所以我用虚拟Alloc分配内存一次,并以我自己的方式使用它。通过这种方式,我可以有效地管理xbox内存和pc内存。+1池对于大小相同的块或对象集合来说效果很好