Здравствуйте, eao197, Вы писали:
E>Коллеги,
E>нужен быстрый аллокатор, удовлетворяющий следующим условиям:
E>* распределять нужно блоки фиксированного, известного в compile-time, размера;
E>* количество этих блоков заранее неизвестно и не органичено (т.е. аллокаторы на пулах фиксированного размера не проходят);
E>* thread-safe;
E>* кроссплатформенный.
E>* свободный (в идеале BSD/MIT лицензия, в случае GPL придется делать свою реализацию под BSD лицензией).
E>Интересуют не только готовые реализации, но и алгоритмы подобных аллокаторов, чтобы в случае чего самому можно было реализовать.
E>Спасибо.
Библиотека
Intel Threading Building Blocks содержит scalable memory allocator, весьма эффективный в случае многопоточного применения. Стоит посмотреть в его сторону тоже.
Здравствуйте, Alex Alexandrov, Вы писали:
AA>Здравствуйте, eao197, Вы писали:
E>>Коллеги,
E>>нужен быстрый аллокатор, удовлетворяющий следующим условиям:
E>>* распределять нужно блоки фиксированного, известного в compile-time, размера;
E>>* количество этих блоков заранее неизвестно и не органичено (т.е. аллокаторы на пулах фиксированного размера не проходят);
E>>* thread-safe;
E>>* кроссплатформенный.
E>>* свободный (в идеале BSD/MIT лицензия, в случае GPL придется делать свою реализацию под BSD лицензией).
E>>Интересуют не только готовые реализации, но и алгоритмы подобных аллокаторов, чтобы в случае чего самому можно было реализовать.
E>>Спасибо.
AA>Библиотека Intel Threading Building Blocks содержит scalable memory allocator, весьма эффективный в случае многопоточного применения. Стоит посмотреть в его сторону тоже.
Он пока слабо портирован. Сейчас афаик только Win32 и Linux. Обещают правда расширять этот список, но обещанного 3 года ждут...
Вот, наткнулся на такую штуку:
TLSF: Memory Allocator for Real-Time
TLSF is a general purpose dynamic memory allocator specifically designed to meet real-time requirements:
* Bounded Response Time. The worst-case execution time (WCET) of memory allocation and deallocation has got to be known in advance and be independent of application data. TLSF has a constant cost O(1).
* Fast. Additionally to a bounded cost, the allocator has to be efficient and fast enough. TLSF executes a maximum of 168 processor instructions in a x86 architecture. Depending on the compiler version and optimisation flags, it can be slightly lower or higher.
* Efficient Memory Use. Traditionally, real-time systems run for long periods of time and some (embedded applications), have strong constraints of memory size. Fragmentation can have a significant impact on such systems. It can increase dramatically, and degrade the system performance. A way to measure this efficiency is the memory fragmentation incurred by the allocator. TLSF has been tested in hundreds of different loads (real-time tasks, general purpose applications, etc.) obtaining an average fragmentation lower than 15 %. The maximum fragmentation measured is lower than 25%.
Судя по исходникам, штука исключительно Linux-овая. Лицензий две GPL и LGPL.
В общем, до кучи -- вдруг кому понадобится.
Еще до кучи:
Memory Allocation: Either Love It or Hate It (or just think it’s okay) -- презентация Андрея Александреску на тему аллокаторов.
Composing High-Perfomance Memory Allocators -- статья, на которую ссылается Александреску в своей презентации.