2014-12-03 5 views
2

Я занимаюсь программированием, когда я пытаюсь сделать то же самое по-разному. (Я, кажется, добавляю два 3-х элементарных вектора вместе в Forth). В одном из моих исправлений я использовал стек возврата для хранения временных значений (поэтому я использую эту функцию), но в дополнение к этому я рассматриваю использование нераспределенной памяти в качестве временного хранилища.Можно ли использовать память словаря без 'allot'?

Я создал два слова для доступа к этой памяти:

: front! here + ! ; 
: [email protected] here + @ ; 

Я попробовал это в моем опыте, и это, казалось, работало на то, что я делаю. У меня нет намерения использовать эту память после выполнения моих подпрограмм. И я живу в словаре, из которых память уже передана программе.

Но моя кишка все еще говорит мне, что это плохо. Неужели это так плохо?

Если это имеет значение, я использую Gforth.

ответ

1

Язык-адвокат, строго говоря, нет. ANS Forth 3.3.3.2 указывается:

Программа может выполнять адресную арифметику в смежных областях.

Выполнение адресной арифметики вне любой выделенной области.

Однако в некоторых случаях это может быть прекрасно. Такие, как gforth.

Обратите внимание, что есть слово под названием PAD, которое возвращает адрес во временную область памяти.

0

: передний! здесь +! ;

Что такое диаграмма стека? Думаю (n offset_in_cells -)?

+0

Wil Baden немного изменил эту схему, чтобы определить локальные переменные. –

+0

Диаграмма выглядит правильно. Он просто принимает значение и смещение. – beeflobill

1

Это нормально, если вы знаете, что делаете, почка PAD - лучшее место, чем ЗДЕСЬ для этого. Существует также альтернативная ALLOCATE и БЕСПЛАТНО:

ALLOCATE (и - а-адр IOR)

Выделяют U адрес единиц непрерывного пространства данных. Эта операция не влияет на указатель информационного пространства . Исходное содержимое выделенного пространства не определено.

Если распределение выполнено успешно, a-addr является выровненным начальным адресом выделенного пространства, а ior равно нулю.

Если операция не выполнена, a-addr не представляет действительный адрес и ior - это код результата ввода-вывода, определенный реализацией.

FREE (а-адр - IOR)

Возврат прилегающая область пространства данных индицируется-адр к системе для последующего распределения. a-addr указывает область данных пространство, которое было ранее получено ALLOCATE или RESIZE.Эта операция не влияет на указатель пространства данных .

Если операция выполнена успешно, ior равно нулю. Если операция завершается с ошибкой, ior - это код результата ввода-вывода, определенный реализацией. American National Standard for Information Systems