[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1840] Re: C言語標準ライブラリ



  こんばんは、川合です。


MURAKAMI Reki さんは 2001/07/19 21:46:18 の「[OSASK 1839] Re: [O
SASK 1838] C言語標準ライブラリ」で書きました:

#  Subject編集が不調のようですね。>もねさん

>memcpy とか strcpyですが、昔(386とか486)は アラインメントをそろえた上でmovsw
>とかを使って高速にというバージョンのものがありました。
>最近のCPUでも その方が早いんでしょうかね……

  ・・・と思いきや、そうではないようです。

  i486以降では、MOV命令やADD命令やSUB命令など、基本的な命令はハ
ードワイヤー化されたので、ほとんど1クロックで実行できるようにな
りました。しかしストリング命令はPentiumになってもマイクロコード
で実行されるので速くなっていません。

  たとえば、

    EAX = [DS:ESI];
    ESI += 4;
    [DS:EDI] = EAX;
    EDX += 4;

の4命令を、i486は(ペナルティーがなければ)4クロックで実行します
。Pentiumならペアリングのおかげで2クロックです。一方、

    MOVSD

だと、i486では7クロックで、Pentiumでは4クロックです。したがって
i486以降であえてストリング命令を使う意義は、速度ではなくてコード
サイズの節約です。

  インテル以外のCPUの資料がないので確認はしていませんが、AMDやCy
rixなどでも同じ傾向だと思います。

>osaskにおける malloc と open の違いは なかなか微妙なとこですね……

  はい。

  しかし、今のバージョンのmallocはまがい物なので、openとは全然違
いますが(笑)。・・・stdlibのmallocは、スタック領域の一部を削っ
て割り当てています(本来はスタックとは別の領域を割り当てるべきな
んですが)。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/