170 похожих чатов

Есть такой код, он нормально работает. idx это std::vector<uint32_t>, idxLast

это uint32_t:

idx.push_back(idxLast+0); idx.push_back(idxLast+1); idx.push_back(idxLast+2);
idx.push_back(idxLast+1); idx.push_back(idxLast+2); idx.push_back(idxLast+3);

Добавил перед ним idx.reserve(idx.size() + 6); - код стал в 30 (!!!) раз медленнее, и висит в коллстеке на скриншоте выше.
???

15 ответов

27 просмотров

idx.reserve(idx.size() + max(6, idx.size()/2))

В чем сакральный смысл reserve(size()/2)?🤔

Только этот код ничего не делает (если, конечно, в посте не опечатка)

Nikita Kulikov
вопрос в том от ччего берется сайз?

Да, поэтому я и сказал про опечатку))

Правда наверное стоит не так писать А типо auto needed_size = v.size() + other.size(); if (v.capacity() < needed_size) { v.reserve(max(needed_size, v.capacity() * 3/2)); } В коде выше есть проблема да...

Arelav
Правда наверное стоит не так писать А типо auto ne...

Вот такой if как раз лишний... Хотя хороший вопрос, как сделать красивее

Dmitriy [Отпуск]
Вот такой if как раз лишний... Хотя хороший вопрос...

Не мы не лишний, так как иначе у нас после итерации size увеличиться и мы опять сделаем reserve

Arelav
Правда наверное стоит не так писать А типо auto ne...

Кажется такой код решает эту задачу? Мы растем только когда нужно, и когда нужно растем либо так чтобы влезла вся следующая итерация, либо на 1.5, если следующая итерация маленькая

точнее, если убрать if - на каждом проходе capacity будет увеличиваться в 1.5 раза

Bulat Ziganshin
точнее, если убрать if - на каждом проходе capacit...

Не, представь size = 10, capacity 10 needed_size = 11 После этой итерации size = 11, capacity = 15 needed_size = 12 После этой итерации size = 12, сapacity = 16

Придумать и реализовать свою стратегию роста можно, но зачем если меня устраивает дефолтная? Все что мне нужно - это возможность разделить push_back на бросающую часть (reserve_next) и не бросающую (push_back с предусловием что size < capacity). Я бы все-таки сказал что главным препятствием для этого предложения является то, что комитет, если мне не изменяет память, поддерживал идею использовать terminate вместо исключений, если закончилась память. Проверить мои слова можно откопав пропозал Саттера про исключения, кажется что там были результаты голосования по этому вопросу.

magras
Придумать и реализовать свою стратегию роста можно...

А как вы хендлите оом от резерва? Я в реальном коде никогда такого не видел, обычно это аборт. Потому что без памяти скорее всего уже не отрекавкриться.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта