【发布时间】:2018-11-13 18:53:26
【问题描述】:
我分配了一个大内存 char* test= malloc(10000000); ,然后我将值放在这个内存上,并为每个值做一些工作。
我想要的是,每1000个索引,我想释放所有内存,直到它为止。
例如
for(long i=0; i<10000000;i++)
DoSomeWork(test[i]);
if(i%1000==0)
releaseMemory(i-1000,i);
如何在 c 中做到这一点?
我知道free 只能释放我所有分配的内存,但我不想等到工作结束才释放所有内存。
我希望每 1000 部作品免费全部 1000 部回来
我必须在程序开始时分配所有内存。
【问题讨论】:
-
如果您预先分配内存,您认为在循环内“释放”它意味着什么?您认为需要定期撤消的 DoSomeWork() 函数内部发生了什么?
-
你需要为你想要的写你自己的内存分配器。以相反的顺序工作,并在需要时致电
brk()和朋友。 -
有几种方法可以做到这一点。一种是在系统级别继续分配一个大块,但使用您自己的机制来控制您的 对象中的哪一个可以使用您的 内存的哪一位。例如,您可能有一个标志数组,指示在任何给定时间哪些内存块正在使用。另一种方法是将您的分配分成更小的部分,并在适当的时候释放它们(并可能重新分配它们)。