Ну кроме того, что будет затрачено дополнительное время на инициализацию (хоть и ничтожно мало) + с таким подходом легко стэк быстро заполнить - нет, никакой роли не играет.
Касаемо "удалены из памяти". Стоит понимать, что когда ты работаешь со стэком, ты работаешь с уже выделенной памятью. Не происходит никакого удаления. Когда ты создаёшь локальную переменную, ты просто резервируешь часть той самой выделенной памяти для того, чтоб потом обратиться к ней по адресу этой самой переменной. А когда блок кода, где была объявлена локальная переменная, обрабатывается до конца, эта самая память просто перестаёт быть зарезервированной и становится доступной для перезаписи новыми данными, при этом, даже не обнуляясь.
PHP код:
main()
{
{// Откроем первый новый блок
new test[8] = "Привет!";// Инициализируем в нём переменную
printf("1) |%s|", test);// Отобразим её содержимое
}// При окончании блока все локальные переменные "удалятся", что мы и проверим дальше
{// Открываем ещё один блок
goto __skip;// Пропускаем инициализацию, дабы сервер не обнулил ячейки
new test2[8];
__skip:
printf("2) |%s|", test2);// Отобразим наш, казалось бы, не заполненный текстом массив
}
}
/* На выходе получим:
1) |Привет!|
2) |Привет!|
То бишь, после "удаления" массива "test" его содержимое осталось в памяти и когда мы создали ещё один массив, намеренно пропустив инициализацию, он занял всё тот же участок стэка, что и предыдущий массив