hirthwork 08.04.2012 19:44 mcabber92FF2E55

ну пиздёц я тупой. я только сейчас понял что плюсовые аллокаторы:

1. не должны быть потокобезопасными — вы ведь не станете делать insert у одного
и того же контейнера в двух потоках одновременно?

2. не должны копировать информацию об аллоцированной памяти при копировании —
если аллокатор скопировали, значит скопировали и весь контейнер, а он сам уже
попросит свой аллокатор ему чего-нибудь зааллоцировать, чтобы создать копию.

1. DZhon 08.04.2012 19:45

А что, ты юзаешь кастомные аллокаторы ? Можно реальные юзкейсы?

2. hirthworkDZhon /1 08.04.2012 19:48 mcabber92FF2E55

например: #oetizt, более-менее приближенный к реальности пример.

3. hirthworkhirthwork /2 08.04.2012 19:49 mcabber92FF2E55

алсо, вчера придумал более человеческую и более generic вариант на заданную тему, чтобы можно было не только для мап и сетов юзать

4. DZhonhirthwork /2 08.04.2012 19:49

Оке, а если перегрузить для агрегируемых объектов new ?

5. DZhonhirthwork /3 08.04.2012 19:50

Просто в той же студии вектор с дефолтным аллокатором несет меньше оверхэда ;[

6. hirthworkDZhon /4 08.04.2012 19:51 mcabber92FF2E55

не-не-не. new может вызываться из нескольких потоков одновременно, а аллокатор даёт как раз возможность локализовать вызовы. до написания своего аллокатора я ещё не дорос, хотя желание есть

7. hirthworkDZhon /5 08.04.2012 19:52 mcabber92FF2E55

по сравнению с чем?

8. hirthworkDZhon /5 08.04.2012 19:52 mcabber92FF2E55

дефолтный аллокатор это malloc/free?

9. DZhonhirthwork /8 08.04.2012 19:54

Дефолтный аллокато — это отсутствие информации об аллокаторе в контейнере :) специализация такая

10. hirthworkDZhon /9 08.04.2012 19:55 mcabber92FF2E55

т.е. экономия в шестнадцать байт на стеке? какой дефолтный размер стека в винде?

11. DZhonhirthwork /10 08.04.2012 19:57

Without this option the stack size defaults to 1 MB

12. DZhonDZhon /11 08.04.2012 19:58

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.)

13. hirthworkDZhon /11 08.04.2012 20:18 mcabber92FF2E55

> 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, если достаточно просто отнаследоваться от аллокатора и
компаратора?

14. dorfeDZhon /1 08.04.2012 22:59

А что, ты юзаешь STL? Можно реальные юзкейсы?

15. dorfeDZhon /12 08.04.2012 23:01

всего три указателя на вектор, вот это прогресс!

16. dorfehirthwork /13 08.04.2012 23:03

ппц ты хакир

17. dorfeDZhon /4 08.04.2012 23:05

так и делают обычно, но не только для "агрегируемых объектов"

18. DZhondorfe /17 09.04.2012 04:30

Спасибо, наш любимый кэп :)

19. DZhondorfe /14 09.04.2012 04:33

Приложения, не критичные к скорости, но требующие общения с железом.
В принципе, можно было и на C# + native code, если так посудить, но на плюсах как-то гибче (субъективно).

Do you really want to delete ?