область применения распределителей повышения: блокнот, например, для фрейма или также долговечный?

#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 это просто еще медленнее.