hirthwork
08.04.2012 19:44 mcabber92FF2E55
ну пиздёц я тупой. я только сейчас понял что плюсовые аллокаторы:
1. не должны быть потокобезопасными — вы ведь не станете делать insert у одного
и того же контейнера в двух потоках одновременно?
2. не должны копировать информацию об аллоцированной памяти при копировании —
если аллокатор скопировали, значит скопировали и весь контейнер, а он сам уже
попросит свой аллокатор ему чего-нибудь зааллоцировать, чтобы создать копию.
А что, ты юзаешь кастомные аллокаторы ? Можно реальные юзкейсы?
например: #oetizt, более-менее приближенный к реальности пример.
алсо, вчера придумал более человеческую и более generic вариант на заданную тему, чтобы можно было не только для мап и сетов юзать
Оке, а если перегрузить для агрегируемых объектов new ?
Просто в той же студии вектор с дефолтным аллокатором несет меньше оверхэда ;[
не-не-не. new может вызываться из нескольких потоков одновременно, а аллокатор даёт как раз возможность локализовать вызовы. до написания своего аллокатора я ещё не дорос, хотя желание есть
по сравнению с чем?
дефолтный аллокатор это malloc/free?
Дефолтный аллокато — это отсутствие информации об аллокаторе в контейнере :) специализация такая
т.е. экономия в шестнадцать байт на стеке? какой дефолтный размер стека в винде?
Without this option the stack size defaults to 1 MB
Finally, in addition to numerous bugfixes, we've performed a major optimization! All of our containers (loosely speaking) are now optimally small given their current representations. This is referring to the container objects themselves, not their pointed-to guts. For example, vector contains three raw pointers. In VC10, x86 release mode, vector was 16 bytes. In VC11, it's 12 bytes, which is optimally small. This is a big deal if you have 100,000 vectors in your program — VC11 will save you 400,000 bytes. Decreased memory usage saves both space and time.
This was achieved by avoiding the storage of empty allocators and comparators, as std::allocator and std::less are stateless. (We'll activate these optimizations for custom allocators/comparators too, as long as they're stateless. Obviously, we can't avoid storing stateful allocators/comparators, but those are quite rare.)
> the stack size defaults to 1 MB
а в Linux — 8 MB
> This is a big deal if you have 100,000 vectors in your program — VC11 will save you 400,000 bytes.
/me судорожно пытается вспомнить, с какими параметрами надо запустить его
программу, чтобы набралось 100k векторов во всех потоках.
алсо, в последние года полтора мои программы на серверах меньше чем с 24 ГБ
оперативы не запускают.
> We'll activate these optimizations
Какой, нахрен activate, если достаточно просто отнаследоваться от аллокатора и
компаратора?
А что, ты юзаешь STL? Можно реальные юзкейсы?
всего три указателя на вектор, вот это прогресс!
ппц ты хакир
так и делают обычно, но не только для "агрегируемых объектов"
Спасибо, наш любимый кэп :)
Приложения, не критичные к скорости, но требующие общения с железом.
В принципе, можно было и на C# + native code, если так посудить, но на плюсах как-то гибче (субъективно).