hirthwork 30.12.2012 21:07 mcabber

надо бы написать класс типа std::string, но который бы имел внутри себя массив char размера задаваемого шаблонным параметром, чтобы можно было короткие строки хранить без дополнительной аллокации в куче

1. ulidtko 30.12.2012 21:08 уважением

small object optimization? есть уже во многих реализациях Библиотеки.

2. hirthworkulidtko /1 30.12.2012 21:09 mcabber

это в каких, например?

3. ulidtkohirthwork /2 30.12.2012 21:19 уважением

во многих. STLport, GCC, LLVM libcxx, в MSVC тоже есть, я слышал.

Пруфы луркать тяжеловато, но вот как минимум:
2005-11-03 STLport 5.0.0 Release
...
Implementation of the short string optimization trick, basic_string have a small static buffer in this case;

> 2005

4. hirthwork 30.12.2012 21:22 talkonaut-iphone_5.91_67b1c873

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

5. ulidtkohirthwork /4 30.12.2012 21:22 уважением

педали-педалики

6. hirthworkulidtko /5 30.12.2012 21:23 talkonaut-iphone_5.91_67b1c873

всё во имя великой цели

7. ulidtko 30.12.2012 21:25

http://libcxx.llvm.org/

After its initial introduction, many people have asked "why start a new library instead of contributing to an existing library?" (like Apache's libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing reasons, but some of the major ones are:

From years of experience (including having implemented the standard library before), we've learned many things about implementing the standard containers which require ABI breakage and fundamental changes to how they are implemented. For example, it is generally accepted that building std::string using the "short string optimization" instead of using Copy On Write (COW) is a superior approach for multicore machines (particularly in C++11, which has rvalue references). Breaking ABI compatibility with old versions of the library was determined to be critical to achieving the performance goals of libc++.

Короче, советую задуматься, а потом заняться чем-нибудь полезным.

8. hirthworkulidtko /7 30.12.2012 21:27 talkonaut-iphone_5.91_67b1c873

задуматься... 31 декабря... фпесду «задуматься»! я программист, а не мыслитель!

9. hirthworkulidtko /7 30.12.2012 21:30 talkonaut-iphone_5.91_67b1c873

придумай лучше задачку, на которой можно будет померяться письками^W^W сравнить производительность

10. ulidtkohirthwork /9 30.12.2012 21:30 уважением

было уже, ищи

11. hirthworkulidtko /7 30.12.2012 22:06 talkonaut-iphone_5.91_67b1c873

в гцц такой оптимизации нет. данные хранятся отдельно от объекта строки. ну а шланг на моей генточке использует libstdc++

13. hirthworkDZhon /12 31.12.2012 11:03 mcabber

ненене, речь уже о том, чтобы сделать не просто отдельные костыли, а аллокатор, который умеет аллоцировать на стеке

Do you really want to delete ?