Не беспокойтесь о памяти.
Фрагменты кода имеют различную семантику.
В первом фрагменте кода (две разные) переменные i
видны только внутри операторов if и else,Таким образом, они не могут быть доступны вне оператора if.
Во втором фрагменте кода переменная i видима и жива вне оператора if.Если он должен использоваться только в операторе if, тогда объявить переменную в блоке, где она не используется, - плохой стиль программирования.