Что эквивалентно memset в Forth?

Если мне нужно заполнить массив одним значением, есть ли типичное слово Форта, чтобы сделать что-то вроде того, что делает memset из C (то есть установить область байтов на определенное значение)?


person Veltas    schedule 23.11.2020    source источник


Ответы (1)


В стандарте Forth слово для инициализации необработанной памяти — ERASE, которое находится в наборе слов Core Extensions:

ERASE ( addr u -- )
Если u больше нуля, очистить все биты в каждом из u< /em> последовательные единицы адреса памяти, начиная с addr.

ERASE, как следует из названия, только очищает/обнуляет память.

В наборе основных слов также есть FILL для установки последовательных символов:

FILL ( c-addr u char -- )
Если u больше нуля, сохранить char в каждом из u последовательных символов памяти, начиная с c-addr.

Однако стандарт не требует, чтобы символы были размером в одну адресную единицу.

Если вы просто хотите установить для диапазона адресных единиц значение, отличное от нуля, то это в любом случае не является переносимой или стандартной операцией, поэтому просто используйте FILL, если ваша адресная единица имеет тот же размер, что и символ (как это в большинстве Фортов).

Стандарт также предоставляет BLANK в наборе слов String для установки строки в пробелы:

BLANK ( c-addr u -- )
Если u больше нуля, сохранить значение символа для пробела в u последовательных позиций символов, начинающихся с c-addr.

person Veltas    schedule 23.11.2020