2011-01-14 65 views
0

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

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

回答

2

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

无论这是否是一个真正的高性能解决方案是另一个问题,但它可能足够快,无所谓。

+0

malloc可能会使用除sbrk以外的其他方式分配内存,例如匿名内存的mmap。 – user562374 2011-01-14 21:31:32