代码之家  ›  专栏  ›  技术社区  ›  Waxhead

是否有操作系统为malloc()实现缓冲?

  •  8
  • Waxhead  · 技术社区  · 14 年前

    我一直在考虑是否可以通过为malloc编写一个“贪婪”的包装来加快malloc的速度。例如,当我要求1MB内存时,最初的分配器会分配10MB,在第二、第三、第四位等等。。。调用malloc函数只需从首先以“正常”方式分配的块中返回内存。当然,如果没有足够的可用内存,您需要分配一个新的贪婪内存块。

    不知怎的,我想一定有人做过类似的事情。所以我的问题很简单:这会显著加快内存分配过程吗。(是的,我可以在问问题之前试一下,但如果没有必要的话,我就是懒得写这样的东西)

    5 回复  |  直到 14 年前
        1
  •  3
  •   Jonathan Leffler    14 年前

    的所有版本 malloc() 在某种程度上执行您所描述的类型的缓冲—它们将获取比当前请求更大的块,并使用大块来满足多个请求,但最多只能满足一些请求大小。这意味着一次对16个字节的多个请求将只需要从o/s中获得更多的内存,每50-100个调用一次,或者沿着这些常规线路。

    的某些版本 malloc() 'The Art of Computer Programming' 第一卷(基本算法)的一组讨论。

        2
  •  3
  •   Milan    14 年前

    前段时间我在浏览googlechrome代码时,发现 http://www.canonware.com/jemalloc/ .

    绝对值得一看!

        3
  •  2
  •   Dr. Snoopy    14 年前

    这种技术叫做 Slab Allocator ,并且大多数操作系统都支持它,但是我找不到可用于用户空间malloc的信息,仅用于内核分配。

    你可以找到杰夫·邦威克的报纸 here ,它描述了Solaris上的原始技术。

        4
  •  1
  •   Chris    14 年前

    Google有一个贪心的malloc()实现,它大致实现了您所想的。它有一些缺点,但在许多用例中都非常快。

        5
  •  -2
  •   San Jacinto    14 年前

    我真的不知道你说的可能已经完成了。但是,我不知道在系统级缓冲malloc()的延迟会大大减少延迟。您仍然需要花时间进入priv.mode进行系统调用,可能会锁定内核级结构(这意味着更多的系统调用和等待锁定),以及类似的事情。

    如果您可以在程序的用户空间中编写自己的内存管理器,并且只在需要更多内存时调用malloc(),则可能会减少延迟。