2013-07-22

http://anond.hatelabo.jp/20130722105524

さらに言えば

if( ptr != NULL )  は 本来 cmp eax,0に展開されるべきだが(最適化無視すれば)

if( ptr ) は 正しく test eax,eax を意味している。

まり、 意味論的には、 if( ptr != NULL )  と if( ptr )  は別物で アセンブラ的には if( ptr ) って書けよと。

もっと言えば、直近でptrを演算していれば 最良の最適化ではtestすら抜けるかもしれない。

 

というのが本来 アセンブラをより簡易に書くC言語系列宿命のはずなんだが、なんか、アセンブラ無視してC++言語が改造されていくなぁと

ちょっと思った。

 

まり NULLとはヌルという抽象的な値のことではなく 合理的に 0になる値のことなんだけどなぁと

記事への反応 -
  • なぜ NULLが0でなければならないか? if( ptr != NULL ) つまり if (ptr) に最適化される命令のアセンブラ展開は   test eax,eax; je label; に展開されるが if( ptr != 1 ) つまり 0以外への...

    • さらに言えば if( ptr != NULL )  は 本来 cmp eax,0に展開されるべきだが(最適化を無視すれば) if( ptr ) は 正しく test eax,eax を意味している。 つまり、 意味論的には、 if( ptr != NULL ) ...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん