Здравствуйте, Feonyf, Вы писали:
F>http://sourceforge.net/projects/loki-lib/ F>Development Status : 4 — Beta
F>я считаю что эта фраза будет уместна, когда будет не beta
На sourceforge эта штука появилась далеко не сразу... Сперва она скачивалась с сайта автора (www.moderncppdesign.com), потом силами энтузиастов её стали делать всеядной — под разные платформы и компиляторы. Никакого статуса "альфа-бета-релиз" у Loki ещё не было.
Но уже тогда божок собирал кровавую жатву.
Здравствуйте, Кодт, Вы писали:
К>... К>Но уже тогда божок собирал кровавую жатву.
Слушай, я ни разу не видел от тебя высказываний в таком ключе ни по одной теме
Чем тебе так насолил Александреску со своей Loki? ИМХО к подобным продуктам в любом случае нужно относится без фанатизма, и держать напильник под рукой...
Здравствуйте, Bell, Вы писали:
К>>Но уже тогда божок собирал кровавую жатву. B>Слушай, я ни разу не видел от тебя высказываний в таком ключе ни по одной теме B>Чем тебе так насолил Александреску со своей Loki? ИМХО к подобным продуктам в любом случае нужно относится без фанатизма, и держать напильник под рукой...
Это не вопрос того, что Александреску насолил или не насолил. Он просто выложил грабли в публичный доступ, и я в этом вижу не его злой умысел, а приколы одноимённого скандинавского божка.
А поскольку грабли прикрыты слоем очень красивых решений, то тем обиднее на них наступать.
Представляешь, если в бусте или STL были бы разбросаны такие подарки?
Кстати, в Dinkumware STL для VC6 — были. Что стоит, например, сортировка списка, игнорирующая предикат...
Еще зависит от аллокатора нижнего уровня. Виндовый выделяет блоками кратными степени 2, за вычетом заголовка, а в конечном счёте все сводится к размеру физстраниц.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Привет
B>Платформа: WinXP Prof. SP2, 2GB RAM, 2xPentium D 3GHz B>Компилятор VC7.1 + STLPort 4.6.2 (C DinkumSTL проблема тоже повторяется)
B>Корень всех зол нашелся в функции void* FixedAllocator::Allocate(): B>
B>void* FixedAllocator::Allocate()
B>{
B> if (allocChunk_ == 0 || allocChunk_->blocksAvailable_ == 0)
B> {
B> Chunks::iterator i = chunks_.begin();
B> for (;; ++i)
B> {
B> if (i == chunks_.end())
B> {
B> // Initialize
B> chunks_.reserve(chunks_.size() + 1);
B> //...
B> chunks_.push_back(newChunk);
B> //...
B>
А мне кажется что это ошибка STL. Метод reserve должен как раз выделять столько памяти, чтобы минимизировать реалокацию. А именно например if( needreallocation ) newreserve = min(текущийreserve*3/2, желаемыйreserve).
По крайней мере до этого поста я именно так и думал
Здравствуйте, рыбак, Вы писали:
Р>А мне кажется что это ошибка STL.
Р>Метод reserve должен как раз выделять столько памяти, чтобы минимизировать реалокацию. А именно например if( needreallocation ) newreserve = min(текущийreserve*3/2, желаемыйreserve).
Метод reserve должен выделять столько памяти, сколько попросят. Объем запрашиваемой памяти (стратегию реаллокации) должен определять вызывающий код. Кстати приведенная тобой формула ни в коей мере не решает исходной проблемы, потому как min (size()*3/2, size()+1) == size()+1
Р>По крайней мере до этого поста я именно так и думал
Если не навязывать вектору свою стратегию реаллокации, то при необходимости он выделяет память в объеме size() * coef. Наиболее популярные значение coef - 2, 1.5.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, рыбак, Вы писали:
Р>>А мне кажется что это ошибка STL. B>
Р>>Метод reserve должен как раз выделять столько памяти, чтобы минимизировать реалокацию. А именно например if( needreallocation ) newreserve = min(текущийreserve*3/2, желаемыйreserve).
B>Метод reserve должен выделять столько памяти, сколько попросят. Объем запрашиваемой памяти (стратегию реаллокации) должен определять вызывающий код. Кстати приведенная тобой формула ни в коей мере не решает исходной проблемы, потому как min (size()*3/2, size()+1) == size()+1
да, я ошибся, конечно же max(текущийreserve*3/2, желаемыйreserve).
Р>>По крайней мере до этого поста я именно так и думал B>Если не навязывать вектору свою стратегию реаллокации, то при необходимости он выделяет память в объеме size() * coef. Наиболее популярные значение coef - 2, 1.5.