假设我们对大小为n的内存块做一个malloc请求,对于k> 0,其中2 ^ k!= n。 Malloc为这个请求的内存块返回空间,但是如何处理页面中的这个剩余缓冲区。 我读的页面通常是两个权力的内存块。
维基指出以下内容:
Like any method of memory allocation, the heap will become fragmented; that is, there will be sections of used and unused memory in the allocated space on the heap. A good allocator will attempt to find an unused area of already allocated memory to use before resorting to expanding the heap.
所以我的问题是如何跟踪?
编辑:如何使用malloc跟踪未使用的内存?
正如Morten Siebuhr所指出的那样,这取决于具体的实施。 在非常简单的情况下,可能会有一个免费的,固定大小的内存块(可能全部具有相同的大小)的列表,所以未使用的内存被浪费了。 请注意,真正的实现永远不会使用这种简单的算法。
这是一些简单的可能性的概述: http : //www.osdcom.info/content/view/31/39/
这个维基百科条目有几个有趣的链接,包括上面的一个: http : //en.wikipedia.org/wiki/Dynamic_memory_allocation#Iplementation
作为最后一句话,使用“malloc实现”来搜索一个堆(有意义的)有价值的链接。
一个标准的BSD风格的内存分配器基本上是这样工作的:
上述总体思路的修改包括:
从实施到实施,这个变化很大 。 有些人会浪费空间,一些细分的页面,直到他们得到所需的大小(或接近它)&c。
如果您是出于好奇,我建议您阅读有关实施的源代码,
如果是因为性能方面的担忧,请尝试对其进行基准测试,看看会发生什么。