ありがとうございます。
whileの外部でaのアドレスが代入したことなんてコンパイラーが調べるんですか?
多分そんなめんどくさいこと調べないですよね?
だからwhile内部で関数呼び出しがあった場合、その関数がaのアドレスの先のメモリーを
書き換えるかも知れないから最適化はされませんと考えた方が良いですよね。