Тут недавно люди возмущались большим размером класса string в stl к MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я наоборот, ищу реализацию такого вектора (с локальным буффером, желательно чтобы ему размер можно было задать). В принципе, можно и самому написать, да просто неохота велосипедостроительствовать.
Может, кто где видел?
Здравствуйте, BitField, Вы писали:
BF>Тут недавно люди возмущались большим размером класса string в stl к MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я наоборот, ищу реализацию такого вектора (с локальным буффером, желательно чтобы ему размер можно было задать). В принципе, можно и самому написать, да просто неохота велосипедостроительствовать. BF>Может, кто где видел?
Здравствуйте, BitField, Вы писали:
BF>Hello, World!
BF>Тут недавно люди возмущались большим размером класса string в stl к MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я наоборот, ищу реализацию такого вектора (с локальным буффером, желательно чтобы ему размер можно было задать). В принципе, можно и самому написать, да просто неохота велосипедостроительствовать. BF>Может, кто где видел?
BitField wrote:
> Тут недавно люди возмущались большим размером класса string в stl к > MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я > наоборот, ищу реализацию такого вектора (с локальным буффером, > желательно чтобы ему размер можно было задать). В принципе, можно и > самому написать, да просто неохота велосипедостроительствовать. > Может, кто где видел?
Здравствуйте, BitField, Вы писали:
BF>А можно такой вопрос: профайлить лучше релизную версию или дебажную?
Это зависит от того, что тебя интересует. Если тебя интересует скорость отладочной версии malloc/free, скорость форматирования при отладочной печати, стоимость вызова функций, которые в релизе будут инлайновыми, и т.д. — профилировать нужно, безусловно, debug-версию.
С вектором сложнее — нельзя дать нормальные гарантии по exception safety
без двойного расхода памяти, если объекты могут кидать исключения в
конструкторе.
Говорю как реализовавший как раз такой вектор (еще с поддержкой COW и
move constructors) Могу выслать, если интересно.
Здравствуйте, BitField, Вы писали:
BF>А можно такой вопрос: профайлить лучше релизную версию или дебажную?
В начале отлаживаешь, затем профайлишь рабочую, т.е. релизную.
Клиент же в конце концов получит релизную версию, и именно к ней будут или не будут претензии к скорости.
Premature optimization is the root of all evil.
Donald Knuth
Premature optimization is as addictive as it is unproductive.
The first rule of optimization is: Don't do it.
The second rule of optimization (for experts only) is: Don't do it yet.
Measure twice, optimize once.
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
By Herb Sutter, Andrei Alexandrescu
When someone asks you to optimize, do demand proof.
Здравствуйте, Cyberax, Вы писали:
C>Говорю как реализовавший как раз такой вектор (еще с поддержкой COW и C>move constructors) Могу выслать, если интересно.
COW надеюсь опционально?
Pavel Chikulaev wrote:
> C>Говорю как реализовавший как раз такой вектор (еще с поддержкой COW и > C>move constructors) Могу выслать, если интересно. > COW надеюсь опционально?
Да, как и статический буффер.
Хотя COW у меня хитрый, я разбил вектор на два типа — vector_builder и
const_vector. vector_builder — это некопируемый тип, который
используется для манипуляций над вектором. const_vector — это
константный вектор, который использует подсчет ссылок. vector_builder
может деструктивно преобразовываться в const_vector (то есть не
происходит лишнего копирования) и обратно.
У меня все получилось достаточно красиво (IMHO ) и vector_builder у
меня соответствует Стандарту (за исключением копирования и присваивания,
естественно).