Распределение памяти в Linux - PullRequest
0 голосов
/ 14 января 2011

У меня есть многопоточное приложение, в котором я распределяю буферы с данными, которые затем ожидают в очередях для отправки через сокеты. Все буферы воспроизводимы, потому что я использую только буферы фиксированного размера во всей программе (1024, 2048, 2080 и 5248 байт). Я заметил, что моя программа обычно использует до 10 буферов каждого типа длины одновременно.

Пока я всегда вручную выделяю новый буфер, а затем освобождаю его (используя malloc () и free ()) там, где он больше не нужен. Я начал задаваться вопросом, достаточно ли Linux умен для того, чтобы кэшировать эту память для меня, поэтому в следующий раз я выделяю новую буферную систему, только быстро получаю буфер, который я уже использовал ранее, и не выполняю тяжелую операцию выделения нового блока памяти?

1 Ответ

2 голосов
/ 14 января 2011

Да, malloc () будет вызывать sbrk () / brk (), только когда в свободном списке нет ничего, что удовлетворяло бы запросу. Это означает, что вы можете вызывать malloc () / free () сколько угодно для того же объема памяти, и все будет хорошо.

Является ли это действительно эффективным решением, у вас есть другой вопрос, но оно может быть достаточно быстрым, чтобы не иметь значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...