LINUX.ORG.RU

[libstdc++] Хочется поменять default-аллокатор.

 


0

0

Есть ли другие способы кроме как:

- включить libstdc++ в исходники проекта и пересобрать его с --enable-libstdcxx-allocator=mt (много телодвижений, да и поддерживать такой libstdc++ нет желания)

- везде явно указывать аллокатор (явный изврат)

Будет ли достаточно перед всеми инклюдами написать такой хак?

#define _GLIBCXX_CXX_ALLOCATOR_H 1
#define __glibcxx_base_allocator __gnu_cxx::mt_allocator
Проблем с бинарником libstdc++.so не будет?


Что там с макросами я не знаю, но можно через LD_PRELOAD попробовать поменять.

true_admin ★★★★★
()

> везде явно указывать аллокатор (явный изврат)

типы надо задавать typedef'ом, тогда будет не изврат

Reset ★★★★★
()
Ответ на: комментарий от Reset

2true_admin:
Вы о более низкоуровневой замене? Типа malloc на какой-нить jemalloc?

2Reset:
Ими и пользуюсь. Только беда в том что явное указывание аллокатора != изменение default-аллокатора. А если потребуется его снова поменять?
Хотя конечно можно сделать typdef __gnu_cxx::mt_allocator default_allocator и везде его юзать... но что-то уж говнецом попахивает. Я ошибаюсь?

l5k
() автор топика
Ответ на: комментарий от l5k

> Хотя конечно можно сделать typdef __gnu_cxx::mt_allocator default_allocator и везде его юзать... но что-то уж говнецом попахивает. Я ошибаюсь?

По стилю выглядит нормально. Ненормально только то, что собираться будет только на gcc.

Reset ★★★★★
()
Ответ на: комментарий от l5k

> Вы о более низкоуровневой замене? Типа malloc на какой-нить jemalloc?

Да, я предлагаю поступить подобным образом. Или я неправильно понимаю задачу?

PS тут нормально со всеми на "ты" общаться.

true_admin ★★★★★
()
Ответ на: комментарий от l5k

Может действительно просто заменить низкоуровневый? Мне например весьма помогал многонитевой аллокатор от гугла(http://goog-perftools.sourceforge.net/), подключить его можно просто через LD_PRELOAD.

LD_PRELOAD=libtcmalloc_minimal.so my_cool_app

YesSSS ★★★
()
Ответ на: комментарий от YesSSS

Задача проста - оптимальное управление памятью.
А чтобы узнать как оптимальнее, надо погонять программу при разных аллокаторах и т.п. Вот, собственно, и всё. (:

Покрутил bitmap_allocator - что-то сплошная деградация получилась. Наверное я не умею его готовить.

А tcmalloc, да, надо попробовать, спасибо. Гугель как всегда решает.

l5k
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.