Если мне нужно заполнить массив одним значением, есть ли типичное слово Форта, чтобы сделать что-то вроде того, что делает memset
из C (то есть установить область байтов на определенное значение)?
Что эквивалентно memset в Forth?
Ответы (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.