2011-01-14 64 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