buffered vector
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 28.10.05 10:04
Оценка:
Hello, World!

Тут недавно люди возмущались большим размером класса string в stl к MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я наоборот, ищу реализацию такого вектора (с локальным буффером, желательно чтобы ему размер можно было задать). В принципе, можно и самому написать, да просто неохота велосипедостроительствовать.
Может, кто где видел?


Заранее thnx!
Re: buffered vector
От: srggal Украина  
Дата: 28.10.05 10:12
Оценка:
Здравствуйте, BitField, Вы писали:

BF>Тут недавно люди возмущались большим размером класса string в stl к MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я наоборот, ищу реализацию такого вектора (с локальным буффером, желательно чтобы ему размер можно было задать). В принципе, можно и самому написать, да просто неохота велосипедостроительствовать.

BF>Может, кто где видел?

Быть может это:
vector.reserve()
vector.resize()


Спасёт отца русской демократии ?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: buffered vector
От: Pavel Chikulaev Россия  
Дата: 28.10.05 10:15
Оценка:
Здравствуйте, BitField, Вы писали:

BF>Hello, World!


BF>Тут недавно люди возмущались большим размером класса string в stl к MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я наоборот, ищу реализацию такого вектора (с локальным буффером, желательно чтобы ему размер можно было задать). В принципе, можно и самому написать, да просто неохота велосипедостроительствовать.

BF>Может, кто где видел?

А профайлер доказал необходимость?
Re: buffered vector
От: Cyberax Марс  
Дата: 28.10.05 10:24
Оценка:
BitField wrote:

> Тут недавно люди возмущались большим размером класса string в stl к

> MSVC. (24 байт -- из-за локального буфера в 16 байт). А вот я
> наоборот, ищу реализацию такого вектора (с локальным буффером,
> желательно чтобы ему размер можно было задать). В принципе, можно и
> самому написать, да просто неохота велосипедостроительствовать.
> Может, кто где видел?

У Александреску flex_string:
http://www.cuj.com/documents/s=7994/cujcexp1906alexandr/alexandr.htm

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0 beta
Sapienti sat!
Re[2]: buffered vector
От: Pavel Chikulaev Россия  
Дата: 28.10.05 10:37
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>У Александреску flex_string:

C>http://www.cuj.com/documents/s=7994/cujcexp1906alexandr/alexandr.htm
Брать там:
http://erdani.org/code/flex_string.zip
Re[2]: buffered vector
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 28.10.05 10:44
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>А профайлер доказал необходимость?

Пока не профайлил.

А можно такой вопрос: профайлить лучше релизную версию или дебажную?
Re[2]: buffered vector
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 28.10.05 10:48
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>BitField wrote:


C>У Александреску flex_string:

C>http://www.cuj.com/documents/s=7994/cujcexp1906alexandr/alexandr.htm

Это все-же строка. А мне вектор нужен.
Re[3]: buffered vector
От: Глеб Алексеев  
Дата: 28.10.05 11:14
Оценка: +2 :)))
Здравствуйте, BitField, Вы писали:

BF>А можно такой вопрос: профайлить лучше релизную версию или дебажную?

Это зависит от того, что тебя интересует. Если тебя интересует скорость отладочной версии malloc/free, скорость форматирования при отладочной печати, стоимость вызова функций, которые в релизе будут инлайновыми, и т.д. — профилировать нужно, безусловно, debug-версию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: buffered vector
От: Cyberax Марс  
Дата: 28.10.05 11:25
Оценка:
BitField wrote:

> C>У Александреску flex_string:

> C>http://www.cuj.com/documents/s=7994/cujcexp1906alexandr/alexandr.htm
> Это все-же строка. А мне вектор нужен.

С вектором сложнее — нельзя дать нормальные гарантии по exception safety
без двойного расхода памяти, если объекты могут кидать исключения в
конструкторе.

Говорю как реализовавший как раз такой вектор (еще с поддержкой COW и
move constructors) Могу выслать, если интересно.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0 beta
Sapienti sat!
Re[3]: buffered vector
От: Pavel Chikulaev Россия  
Дата: 28.10.05 11:29
Оценка:
Здравствуйте, 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.

Re[4]: buffered vector
От: Pavel Chikulaev Россия  
Дата: 28.10.05 11:30
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Говорю как реализовавший как раз такой вектор (еще с поддержкой COW и

C>move constructors) Могу выслать, если интересно.
COW надеюсь опционально?
Re[4]: buffered vector
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 28.10.05 11:48
Оценка:
Здравствуйте, Cyberax, Вы писали:



C>Говорю как реализовавший как раз такой вектор (еще с поддержкой COW и

C>move constructors) Могу выслать, если интересно.

Буду благодаген.
Re[5]: buffered vector
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 28.10.05 11:50
Оценка:
Здравствуйте, BitField, Вы писали:

BF>Буду благодаген.


Мыло в профиле (профайле )
Re[5]: buffered vector
От: Cyberax Марс  
Дата: 28.10.05 12:27
Оценка:
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 у
меня соответствует Стандарту (за исключением копирования и присваивания,
естественно).

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0 beta
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.