メモリオーダリング
次にポインタをサポートするC/C++などの言語で、同じ加算をポインタ間接指定で表現した場合を考える。
式 *x を評価することは、ポインタの「参照外し」と呼ばれ、x の現在の値で指定される場所のメモリを読み出すことになる。ポインタからの読み出しの効果は、アーキテクチャのメモリモデルによって決まる。標準的なプログラムの記憶装置から読み出す場合は、メモリの読み出し操作の順序による副作用はない。組込みシステムのプログラミングでは、メモリマップドI/Oが非常に一般的であり、メモリへの読み書きがI/O操作やプロセッサの動作モードの変更を引き起こすため、目に見える副作用が発生する。上の例では、ポインターが通常のプログラムメモリを指していて、このような副作用がないと仮定する。コンパイラは、これらの読み出しをプログラム順に自由に並べ替えることができ、プログラムから見える副作用はない。
もし代入された値がポインタ間接であったなら?
言語定義ではコンパイラがこれを次のように分解することはできそうにない。
これはほとんどの場合、効率的とは言えず、ポインタの書き込みには、目に見えるマシンの状態に副作用が生じる可能性がある。