Wax*_*ead 8 c memory malloc allocation calloc
for/while/do中的很多c/malloc()会消耗很多时间,所以我很好奇是否有任何操作系统为快速malloc缓冲内存.
我一直在思考是否可以通过为malloc编写一个"贪婪"的包装来加速malloc的速度.例如,当我要求1MB内存时,初始分配器将分配10MB,而在第二,第三,第四等...调用malloc函数将简单地从块中返回内存,首先分配"正常"方式.当然,如果没有足够的可用内存,你需要分配一个新的贪婪的内存块.
不知何故,我认为某人之前必须做过这件事或类似事情.所以我的问题很简单:这是否能够显着加快内存分配过程.(是的,我可以在提出问题之前尝试过,但如果没有必要,我只是懒得写这样的东西)
所有版本都会malloc()
在某种程度上对您描述的类型进行缓冲 - 它们将获取比当前请求更大的块,并使用该大块来满足多个请求,但仅限于某个请求大小。这意味着一次对 16 字节的多个请求只会在每 50-100 次调用或类似的情况下需要操作系统更多的内存。
不太清楚的是边界大小是多少。他们很可能一次分配一些相对较小的 4 KiB 倍数。更大的请求(MiB 大小的请求)将在每次无法从空闲列表中满足请求时返回到系统以获取更多内存。不过,该阈值通常远小于 1 MiB。
某些版本malloc()
允许您或多或少地调整其分配特征。它一直是一个丰富的研究领域——有许多不同的系统。请参阅 Knuth的《计算机编程艺术》第 1 卷(基本算法)中的一组讨论。