« お手軽、焼きリンゴに挑戦! | トップページ | 『2010もやしもん忘年会』に行ってみた♪ »

2010年12月18日 (土)

『float』の『++』や『--』って…

C言語のお話である…。

自分は、『float』で『++』や『--』って、
使えないと思い込んでいた節がある…。

基本的には、

>    float f;
>    f +=1;
>    f -=1;

こう書いていた。

所が最近こう書けることを知った。

>    float f;
>    f++;
>    f--;

最初は、0.1とか足される?引かれる?

なんて思ったりした。

でも、ちゃんと1の増減だったりする。

マシン語だと1の増減は、スペシャルな命令があり
『Z80/8080』系だと『inc』や『dec』などがそれに当たる。
他にも『MC68000』などは、『ADDQ』や『SUBQ』などがある。

何がスペシャルかと言うと他の命令より格段に高速に実行される。

なので『int』での1の増減は『inc』や『dec』かと思っていた。

でも、『float』は、データ構造が異なるのでどおなのかな?

と思って見てみた…。

>void main( void  )
>{
>    int    a;
>    float ff;
>    ff=0;
>    ff++;
>    ff--;
>    a=0;
>    a++;
>    a--;
>}

をデバッガ上で見てみるとこうなっていた…。

4:    void main( void  )
5:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,48h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-48h]
0040101C   mov         ecx,12h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
6:        int a;
7:        float ff;
8:        ff=0;
00401028   mov         dword ptr [ebp-8],0
9:        ff++;
0040102F   fld         dword ptr [ebp-8]
00401032   fadd        dword ptr [__real@4@3fff8000000000000000 (0042601c)]
00401038   fst         dword ptr [ebp-8]
10:       ff--;
0040103B   fsub        dword ptr [__real@4@3fff8000000000000000 (0042601c)]
00401041   fstp        dword ptr [ebp-8]
11:       a=0;
00401044   mov         dword ptr [ebp-4],0
12:       a++;
0040104B   mov         eax,dword ptr [ebp-4]
0040104E   add         eax,1
00401051   mov         dword ptr [ebp-4],eax
13:       a--;
00401054   mov         ecx,dword ptr [ebp-4]
00401057   sub         ecx,1
0040105A   mov         dword ptr [ebp-4],ecx
14:   }
0040105D   pop         edi
0040105E   pop         esi
0040105F   pop         ebx
00401060   mov         esp,ebp
00401062   pop         ebp
00401063   ret

やっぱ表記は、『f++;』でも中身では、『f+=1;』なんだ…。

でも、『a++;』も中身は、『a+=1;』だったので吃驚!

『int』の増減も『add』や『sub』ってのは、
条件分けで『inc』や『dec』を噛ませるのが
コストパフォーマンス的に意味が無いからかも…。

確かメモリにダイレクトに『inc』は、駄目だったかと…

うろ覚えなので『はじめて読む486』を開く。

するとメモリダイレクトでもOKだ…。

じゃあ、もう『inc』をわざわざ使うメリットが無いんだろうな…。

そんな瑣末な命令速度差なんか
メモリーアクセスで吹き飛ぶんだろうな。

昔は、『add a,1』より『inc a』の方が早い!

なんてのに血道を注いでいたのに…

なんて…

何となく手がかじかむ寒さの中で思ってみた…。

|

« お手軽、焼きリンゴに挑戦! | トップページ | 『2010もやしもん忘年会』に行ってみた♪ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/50329728

この記事へのトラックバック一覧です: 『float』の『++』や『--』って…:

« お手軽、焼きリンゴに挑戦! | トップページ | 『2010もやしもん忘年会』に行ってみた♪ »