Previous: , Up: Memory   [Contents][Index]


6.7.7 Memory Blocks

メモリ・ブロックは多くの場合、 文字の連なり(character strings)を表します。 文字の連なりをメモリに保存する方法については、 String representations を参照してください。 他の連なり処理ワード(string-processing words)については、 Displaying characters and strings を参照してください。

これらのワードのいくつかは、 アドレス単位ブロック(address unit blocks)で機能します。 その場合、 文字の連なり(character strings)を扱う際には通常、 ワードの前に CHARS を挿入する必要があります。 ほとんどのワードは文字ブロック(character blocks)で機能し、 文字アライメント・アドレス(char-aligned address)を期待します。

重複するメモリ領域間で文字達をコピーする場合は、 move を使用します。 cmovecmove> は、 適切に実装された move よりも遅くなる傾向があります。

move ( c-from c-to ucount – ) core “move”

c-from アドレスにある ucount 個のcharの内容を c-to アドレスにコピーします。 move は、 2 つの領域が重なっている場合でも正しく機能します。

cmove ( c-from c-to u – ) string “c-move”

データ空間で c-from アドレスから ucount 個のcharの内容を c-to アドレスにコピーします。コピーは、 1 char ずつコピーしながら下位アドレスから上位アドレス方向へ進めます。 つまり、 重複領域の場合、 c-to <= c-from であれば安全です。

cmove> ( c-from c-to u – ) string “c-move-up”

データ空間で c-from アドレスから ucount 個のcharの内容を c-to アドレスにコピーします。 コピーは、 1 char ずつコピーし上位アドレスから下位アドレス方向に進みます。 つまり、 重複領域の場合、 c-to >= c-from であれば安全です。

fill ( c-addr u c – ) core “fill”

cc-addr から u 個char単位で格納します。

erase ( addr u –  ) core-ext “erase”

addr から始まる u aus のすべてのビットをクリアします。

blank ( c-addr u –  ) string “blank”

スペース文字を c-addr アドレスから u 個char単位で格納します。

insert ( string length buffer size –  ) gforth-0.7 “insert”

バッファーの先頭に文字列を挿入します。 残りのバイトは後ろにずらされます(訳注: sizeを超えた分は捨てられます)。

delete ( buffer size u –  ) gforth-0.7 “delete”

最初の u バイトをバッファーから削除し、 その分前にずらして、 残りの最後のバイトを空白(0x20)で埋めます。

compare ( c-addr1 u1 c-addr2 u2 – n ) string “compare”

連なり(string)内のバイトの値に基づいて、 2 つの連なり(strings)を(英語の)辞書順(lexicographically)に比較します(つまり、 英大文字と小文字が区別され、 ロケール固有の照合順序は無視されます)。 2つが等しい場合、 n は 0 です。 最初の連なり(string)が小さい場合、 n は -1 です。 最初の連なり(string)が大きい場合、 n は 1 です。

pad ( – c-addr  ) core-ext “pad”

c-addr は、 一時的なデータ・ストレージとして使用できる一時領域のアドレスです。 少なくとも 84 文字分の空間が使用可能です。


Previous: Address arithmetic, Up: Memory   [Contents][Index]