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

Я же правильно понимаю что вектор при вызове resize() в

меньшую сторону не делает реаллокацию ?

23 ответов

22 просмотра

Не гарантированно, но вроде обычно нет

Может и делать...

Главное - зачем тебе это знать?

там есть еще shrink_to_fit(), это как раз чтобы уменьшить потребляемую память, если resize в меньшу сторону был

Ilya Zviagin
Главное - зачем тебе это знать?

Ну как, к примеру либо использовать одну переменную типа вектор и ее ресайзить либо каждый раз новую.

нет, если resize в меньшую сторону, то он имеет право сделать реалокацию, только вот никто из существующих компиляторов такой фигней не занимаются

Александр Водянников
Ну как, к примеру либо использовать одну переменну...

ну если ты хочешь переиспользовать вектор каким то образом, типо положил 20 штук, забыл их, дальше опять начал накладывать новые, то как минимум там нужно вызывать деструкторы и сложность окажется линейной(95%, что там в случае тривиального случая они всё же просто забудутся)

Till Schneider
нет, если resize в меньшую сторону, то он имеет пр...

не наблюдаю в нормативном тексте resize() право инвалидировать все итераторы. такое явно пишут, по-моему

Vlad
не наблюдаю в нормативном тексте resize() право ин...

Там пишут о инвалидации текущей или следующих позиций Инвалидация != реалокация

Till Schneider
Там пишут о инвалидации текущей или следующих пози...

Именно, об инвалидации следующих позиций. Этого достаточно, чтобы трактовать как гарантию отсутствия инвалидации предыдущих. Возможно ли гарантировать отсутствие инвалидации при реалокации?

Till Schneider
Там пишут о инвалидации текущей или следующих пози...

если, как вы говорите, resize() может сделать реаллокацию, то инвалидировано будет все, а не только с текущей позиции и до конца shrink_to_fit() и тот инвалидирует все

Vlad
если, как вы говорите, resize() может сделать реал...

а если рассмотреть какую-то систему "сферический конь в вакууме", на которой возможно совершать реалокацию в меньшую сторону, просто высвобождая память неиспользуемых элементов, при этом не затрагивать ту память, которая была выделена под имеющиеся элементы?

Till Schneider
а если рассмотреть какую-то систему "сферический к...

но ведь задача стандарта как раз найти общее поведение, которое не будет противоречить большинству систем. Таким образом, даже если на описанной вами системе такое возможно, то мы все равно будем считать, что они инвалидировались, так как нам важна переносимость

Till Schneider
а если рассмотреть какую-то систему "сферический к...

Так это на любой системе можно, вот хоть прямо на Винде. Тем более что весьма вероятно что новый кусок памяти будет другим, и старый можно будет использовать полностью

Till Schneider
а если рассмотреть какую-то систему "сферический к...

да, такое теоретически возможно, но я не вижу, чтобы стандарт требовал существование такого механизма от реализаций (либо я не нахожу, чтобы требовал). зато нахожу еще одно упоминание реаллокации, которая все инвалидирует поэтому если такая чудесная реаллокация и будет выполнена реализацией, она не будет реаллокацией в терминах стандарта, то есть не будет ничего инвалидировать

Vlad
да, такое теоретически возможно, но я не вижу, что...

>> она не будет реаллокацией в терминах стандарта Я не уверен, но означает ли инвалидация, что адреса элементов будут буквально изменены? Если нет – инвалидация у нас всё-равно случалась, хотя адреса и не изменились – для нас это ничего не значит, мы всё равно не имеем права обращаться к данным по инвалидированным указателям из-за UB. А если обратимся и обнаружим, что элемент на месте – ничего страшного, ожидаемое поведение – тоже одно из проявлений UB

Ofee Oficsu
>> она не будет реаллокацией в терминах стандарта ...

я думаю, что она значит, что они могут измениться, потому что никто не требует от реализаций расширять текущий storage если адреса не поменялись и мы пользуемся старыми указателями и ссылками, то это даже не UB благодаря transparently replaceable, если я ничего не упускаю

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта