в большинстве случаев выйдет 1-в-1, одинаковый асмовый код. Я думаю тут такими простыми методами не отделаться, надо че-то боле глубокое ;)
Так-же и про кол-во локальных переменных - далеко не факт, что это даст какой-то прирост, т.к. один хер, будут они локальными или глобальными, они все равно в памяти. А процедура резервирования стека - она не зависит от размера переменных локальных.
ЗЫ, а вообще, я на сях в последнее время кодю только для таких устройств, которые и 10кб текста не осилят распарсить (эх хобби), так что далеко мне до этого ;) А что-то высокоуровневое - по работе на перле в последние дофига времени, хотя по мне, перл и какие-то сложные алгоритмические задачи -- вещи взаимоисключающие, перл своим синтаксисом не дает сосредоточится на сути задачи (конкретно тем, что для любых сложных структур данных приходится заводить либо просто хеши, и строго помнить, как что названо, либо городить на каждую структуру - кучу куда, обьект, в общем имхо не всегда это 100% тру языг).
ЗЗЫ. Да, вызов функции по адресу -- вещь достаточно медленная, так что возможно эт и стало тормозом. Фактически, насколько я знаю, это всегда срыв конвеера проца, т.к. почти до последнего момента процу не известен предполагаемый адрес перехода, отсюда - огромный оверхед, по 30-50 проебаных тактов (зависит от длинны конвеера) на каждый такой вызов вызов.
ЗЗЗЫ. А не пробовал, какой перформанс даст машинно-сгенерированный парсер? Может стоит каким-нибудь yacc-ом попробовать, там не так долго, нужно только скормить ему саму грамматику и немного кода обвязочного.