С какого это перепоя? Если действительно есть такой компилятор, то это его глюк, а не оптимизация. Такое ощущение, что ты спутал 2 вещи:
- Просто выкинуть нафиг вызов memset.
- Вместо вызова memset использовать встроенный код (rep stosd или типа того). Т.е. по сути -- тот же memset, но без накладных расходов на push+call+ret+add.
an$ man bzero
[skip]
CONFORMING TO
4.3BSD. This function is deprecated -- use memset in new
programs.
В переводе с англ. это означает, что разработчики glibc рекомендуют
использовать в новых программах memset вместо bzero.
2 kkk.
Такое ощущение, что в этом случае обнулится только a[0].
И потом, это работает только один раз. После того, как ты чего-то записал в `a', а затем решил его обнулить, `a={0};' вообще не прокатит.