Проблемы с обслуживанием, которые неинициализированные локальные жители вызывают (в частности, указатели), будут очевидны для всех, кто выполнил немного обслуживания или улучшения c/С++, но я все еще вижу их и иногда слышу последствия для производительности, данные в качестве их оправдания.
Легко продемонстрировать в c, что избыточная инициализация оптимизирована:
$ less test.c
#include <stdio.h>
main()
{
#ifdef INIT_LOC
int a = 33;
int b;
memset(&b,66,sizeof(b));
#else
int a;
int b;
#endif
a = 0;
b = 0;
printf ("a = %i, b = %i\n", a, b);
}
$ gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
[Не оптимизировано:]
$ gcc test.c -S -o no_init.s; gcc test.c -S -D INIT_LOC=1 -o init.s; diff no_in
it.s init.s
22a23,28
> movl $33, -4(%ebp)
> movl $4, 8(%esp)
> movl $66, 4(%esp)
> leal -8(%ebp), %eax
> movl %eax, (%esp)
> call _memset
33a40
> .def _memset; .scl 3; .type 32; .endef
[Оптимизированно]
$ gcc test.c -O -S -o no_init.s; gcc test.c -O -S -D INIT_LOC=1 -o init.s; diff
no_init.s init.s
$
Итак, производительность WRT при каких обстоятельствах является обязательной переменной инициализации НЕ хорошей идеей?
ЕСЛИ применимо, нет необходимости ограничивать ответы на c/С++, но, пожалуйста, проясните язык/среду (и воспроизводимые доказательства намного предпочтительнее, чем спекуляции!)