памяти ? По другому - может ли вышестоящие функции паниковать из за нехватки памяти ?
Они отправляют данные в T: Write. Зависит от поведения того, куда оно пишет. Есть Т не аллоцирует ничего, то оверфлоу не будет; если это BufWriter, то в теории может
Понятно - тут больше вопрос про stdout и stderror. Т.е для информирования пользователя о нехватке памяти (ошибке) использую например: println! и при этом возможна ситуация что println! тоже не отработает, и запаникует - потому что свобоной памятие нет ?! Замкнутый круг ... 😉
Я думаю, что ядро оставит место для stdin. Все-таки все эти вызовы уходят именно туда. Поэтому про ошибке аллокации будет так: 1. Ловим ошибку ООМ 2. Ядро печатает ошибку (ведь место осталось, либо же аллокация просто неуспешна)
а какая есть альтернатива writeln! и println! - которая гарантированно не запаникует - ествесвенно что если на вход этой функции будет "подана" static строка ? Чем еще можно "напечатать" static строку - ну что то наподобие printf в С ?
Сам println не паникует
Когда свободной памяти нет, программа не паникует – её просто убьёт oom killer/сама абортнется. Чёт я не уверен, что вы в си как-то надёжно решаете эту проблему, т.к. printf не решение.
Решаю, статически опредлеяю буффер char temp_str [MAX_LEN], Туда копирую текст сообщения, обрезая все что "непомещается" в MAX_LEN, (ценой потери куска сообщения но это приемлемо так как MAX_LEN большой и окусывания не происходит). Потом печатаю printfом, либо пишу этот буффер в файл. На RUSTе хотел отказаться от такой методики, вот ... возник поэтому возник такой вопрос про println!.
Обсуждают сегодня