Re[2]: Пользователям Loki::SOA.
От: Feonyf  
Дата: 02.06.08 19:33
Оценка: :)
Здравствуйте, Кодт, Вы писали:


К>Поздравляю! Сукандинавский божок нашёл ещё одну жертву. Божки — они такие, без жертв не могут.


http://sourceforge.net/projects/loki-lib/
Development Status : 4 — Beta

я считаю что эта фраза будет уместна, когда будет не beta
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
Re[3]: Пользователям Loki::SOA.
От: Кодт Россия  
Дата: 03.06.08 07:32
Оценка:
Здравствуйте, Feonyf, Вы писали:

F>http://sourceforge.net/projects/loki-lib/

F>Development Status : 4 — Beta

F>я считаю что эта фраза будет уместна, когда будет не beta


На sourceforge эта штука появилась далеко не сразу... Сперва она скачивалась с сайта автора (www.moderncppdesign.com), потом силами энтузиастов её стали делать всеядной — под разные платформы и компиляторы. Никакого статуса "альфа-бета-релиз" у Loki ещё не было.
Но уже тогда божок собирал кровавую жатву.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: Пользователям Loki::SOA.
От: Bell Россия  
Дата: 03.06.08 07:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>...

К>Но уже тогда божок собирал кровавую жатву.
Слушай, я ни разу не видел от тебя высказываний в таком ключе ни по одной теме
Чем тебе так насолил Александреску со своей Loki? ИМХО к подобным продуктам в любом случае нужно относится без фанатизма, и держать напильник под рукой...

ЗЫ
просто интересно
Любите книгу — источник знаний (с) М.Горький
Re[5]: Пользователям Loki::SOA.
От: Кодт Россия  
Дата: 03.06.08 08:57
Оценка:
Здравствуйте, Bell, Вы писали:

К>>Но уже тогда божок собирал кровавую жатву.

B>Слушай, я ни разу не видел от тебя высказываний в таком ключе ни по одной теме
B>Чем тебе так насолил Александреску со своей Loki? ИМХО к подобным продуктам в любом случае нужно относится без фанатизма, и держать напильник под рукой...

Это не вопрос того, что Александреску насолил или не насолил. Он просто выложил грабли в публичный доступ, и я в этом вижу не его злой умысел, а приколы одноимённого скандинавского божка.
А поскольку грабли прикрыты слоем очень красивых решений, то тем обиднее на них наступать.

Представляешь, если в бусте или STL были бы разбросаны такие подарки?
Кстати, в Dinkumware STL для VC6 — были. Что стоит, например, сортировка списка, игнорирующая предикат...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[5]: Золотое сечение
От: gear nuke  
Дата: 15.06.08 15:12
Оценка:
Здравствуйте, remark,

Еще зависит от аллокатора нижнего уровня. Виндовый выделяет блоками кратными степени 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
Re: Пользователям Loki::SOA.
От: рыбак  
Дата: 16.06.08 07:29
Оценка:
Здравствуйте, Bell, Вы писали:

B>Привет всем.


Привет

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).
По крайней мере до этого поста я именно так и думал
Re[2]: поправочка
От: рыбак  
Дата: 16.06.08 07:31
Оценка:
if( needreallocation ) newreserve = max(текущийreserve*3/2, желаемыйreserve).
Re[2]: Пользователям Loki::SOA.
От: Bell Россия  
Дата: 16.06.08 07:40
Оценка:
Здравствуйте, рыбак, Вы писали:

Р>А мне кажется что это ошибка 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.
Любите книгу — источник знаний (с) М.Горький
Re[3]: Пользователям Loki::SOA.
От: рыбак  
Дата: 16.06.08 07:48
Оценка:
Здравствуйте, 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.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.