hirthwork
30.12.2012 21:07 mcabber
надо бы написать класс типа std::string, но который бы имел внутри себя массив char размера задаваемого шаблонным параметром, чтобы можно было короткие строки хранить без дополнительной аллокации в куче
small object optimization? есть уже во многих реализациях Библиотеки.
это в каких, например?
во многих. 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
впрочем чем переизобретать для каждого контейнера, можно тупо написать соответствующий аллокатор. даже два: один — полноценный аллокатор на массиве, другой — аллоцирующий не больше двух кусков памяти на массиве одновременно
педали-педалики
всё во имя великой цели
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++.
Короче, советую задуматься, а потом заняться чем-нибудь полезным.
задуматься... 31 декабря... фпесду «задуматься»! я программист, а не мыслитель!
придумай лучше задачку, на которой можно будет померяться письками^W^W сравнить производительность
было уже, ищи
в гцц такой оптимизации нет. данные хранятся отдельно от объекта строки. ну а шланг на моей генточке использует libstdc++
Я прнс
http://qt-project.org/doc/qt-4.8/qvarlen...
ненене, речь уже о том, чтобы сделать не просто отдельные костыли, а аллокатор, который умеет аллоцировать на стеке