Re[2]: std::fopen падает в релизе с ошибкой 0xc0000417
От: Alexander G Украина  
Дата: 04.02.22 13:52
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ох. Вот по-этому я говорю, что программы на C++ имеют тенденцию без нужды аллоцировать память на куче мелкими кусочками. Но мне никто не верит. Можно ведь так, например, сделать:


Pzz>
Pzz>{
Pzz>    char mode[8] = "w";
Pzz>    if (!appConfig.getOptOverwrite())
Pzz>        strcat(mode, "x");
Pzz>}
Pzz>


А можно и не делать.

small string optimization хотя бы на три буквы, а то и на семь или больше — де факто стандарт.

И лишние аллокации выоптимизировать компиляторы учатся во всё большем числе случаев.

Завезли constexpr строки в C++20.
Сейчас они должны умереть на этапе компиляции, но это ограничение могут в будущем отменить, и тогда компиляторам придётся уметь делать глубокие оптимизации, т.к. всё равно пропагейтить аллокации нужно будет уметь.

Ныне не справилась бы в данном случае, но вообще для std::string clang уже что-то умеет https://godbolt.org/z/f1jfP4537

Pzz>На вид все ОК. Наверное где-то протупил, но не таким очевидным образом. Например, fclose() два раза позвал, или как-то по-другому кучу разнес. fopen() не должен кидать исключений, аварийно завершать поток и т.п. ни при каких обстоятельствах.


Всё хуже https://rsdn.org/forum/cpp.applied/8187612.1
Автор: удусекшл
Дата: 04.02.22
Русский военный корабль идёт ко дну!
Отредактировано 04.02.2022 14:22 Alexander G . Предыдущая версия . Еще …
Отредактировано 04.02.2022 14:02 Alexander G . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.