#c #linux #memory-management #boost #qnx
#c #linux #управление памятью #повышение #qnx
Вопрос:
Я пишу приложение для платформы QNX. Освобождения там, похоже, происходят очень медленно. Даже указание системе никогда не освобождать память обратно в ядро не сильно поможет. Это быстрее, но все еще остается довольно долгое время в системе (т. Е. Внутри вызова удаления C ).
Я думал, что мог бы применить пользовательские распределители, чтобы помочь уменьшить этот сбой. Я написал тест, в котором показан мой вариант использования:http://pastebin.com/x23aB8uj
Вывод на моем ноутбуке с Linux таков:
Running test_alloc ...
test_alloc took: 1.07227 ms.
Running dealloc ...
dealloc took: 0.0358887 ms.
Running test_custom_alloc_pool_1 ...
test_custom_alloc_pool_1 took: 1.70239 ms.
Running dealloc ...
dealloc took: 91.7312 ms.
Running test_custom_alloc_pool_2 ...
test_custom_alloc_pool_2 took: 0.78833 ms.
Running dealloc ...
dealloc took: 95.5864 ms.
Это означает, что для одного освобождения требуется почти миллисекунда (на моем ноутбуке. В QNX это пара миллисекунд).
В примере boost::singleton_pool
(ссылка) после указания malloc:
Сделайте что-нибудь с t; не тратьте время на его освобождение ().
Означает ли это, что мой вариант использования просто не применим к использованию этих распределителей, т. Е. Их следует использовать больше для временного блокнота, где вы редко уничтожаете объекты?
Комментарии:
1. Связанные, см. Пользовательские распределители кучи на Programmers.SE . Я предполагаю, что это связано с QNX и его распределителем C или malloc, а не с Boost.
2. @jww результаты теста получены с моего ноутбука Linux, а не с QNX. Таким образом, освобождение там также происходит медленно при использовании пулов. На QNX это просто еще медленнее.