【问题标题】:Memory allocation in LinuxLinux中的内存分配
【发布时间】:2011-01-14 19:47:45
【问题描述】:

我有一个多线程应用程序,我在其中分配数据缓冲区,然后在队列中等待通过套接字发送。所有缓冲区都是可重现的,因为我在整个程序中仅使用固定大小的缓冲区(1024、2048、2080 和 5248 字节)。我注意到,我的程序通常同时使用最多 10 个每种长度类型的缓冲区。

到目前为止,我总是手动分配新缓冲区,然后在不再需要它的地方释放它(使用 malloc() 和 free())。我开始怀疑Linux是否足够聪明地为我缓存这些内存,所以下次我分配新的缓冲区系统时只是快速接收我之前已经使用过的缓冲区而不执行分配新内存块的繁重操作?

【问题讨论】:

    标签: linux memory-management


    【解决方案1】:

    是的,只有当空闲列表中没有任何内容满足请求时,malloc() 才会调用 sbrk() / brk()。这意味着您可以尽可能多地调用 malloc()/free() 以获得相同大小的内存,并且会很好。

    这是否是一个真正高效的解决方案是另一个问题,但它可能足够快,不重要。

    【讨论】:

    • malloc 可能会使用 sbrk 以外的其他方式来分配内存,例如匿名内存的 mmap。
    猜你喜欢
    • 2020-03-01
    • 2014-04-20
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多