СЛОВАРЬ - есть программная реализация отношения "имя-действие". Возможность что-то там "доразместить" - лишь оптимизационное хранение в СЛОВАРЕ части ЗНАЧЕНИЯ (например хранение там прочтенного WORD слова). Потребность что-то там "выравнить" - лишь техническая подробность реализации.
Имя - есть прочтенное из ПОТОКА слово (например, "слово, завершающееся пробелом", или "wnd-msg-wpar-lpar", или константа, порождающая выбор CASE, или просто индекс)... Все зависит от вида ПОТОКА.
Действие - адрес передачи управления, или ссылка на сложный объект, или запись в БД... Зависит от того, что требуется процедуре ВЫПОЛНИТЬ.
В любом случае, т.к. FORTH не оперирует понятием данных, позволяет понимать "имя" и "действие" так, как требует задача.
...
Имеет место в процедуре ВЫПОЛНИТЬ (в режиме компиляции) или в процедуре КОМПИЛИРОВАТЬ (явная компиляция). Думаю, удачной оптимизацией будет обращение ВЫПОЛНИТЬ не к СЛОВАРЮ напрямую, а вызов механизмов КОМПИЛИРОВАТЬ.
Компиляция не в СЛОВАРЬ? Физически это возможно, но логически речь идет просто о еще одном СЛОВАРЕ (либо временном сохранении определений в СТЕКЕ для последующего вызова КОМПИЛИРОВАТЬ). Как, впрочем, возможна физическая запись в область, где храниться СЛОВАРЬ, но не в него, а "рядом".
"Формирование кода"?- Это лишь часть процедуры компиляции.
"Формирование данных"?- В FORTH нет концепции данных.