Поддельный стек быстрее, чем настоящий стек

Я делаю рекурсивный парсинг.

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

Было бы быстрее иметь стек с идентификатором состояния, например:

 int* stack = 0
 int top = 0;
 // ...
 // drill down bit
 if (stack == 0)
     stack = (int*)malloc(STACK_JUMP_SIZE);
 else if (top % STACK_JUMP_SIZE == 0)
     stack = (int*)realloc(stack, (top+STACK_JUMP_SIZE) * sizeof(int));
 stack[top++] = currentState;
 // ...
 // pop up later
 {currentState = stack[--top]; {
 if (top == 0) {
     free(stack);
     stack = 0;
 } else if ((top+1) % STACK_JUMP_SIZE == 0) {
     stack = (int*)realloc(stack, (top+1)*sizeof(int));
 }

Или было бы быстрее разбить его на соответствующие функции и позволить C ++ позаботиться о стеке.

(Я знаю, что кто-то скажет мне: «Это C, а не C ++», поэтому я заранее отвечаю, C ++ моей программы, но в нем много C).

7
задан matiu 17 February 2012 в 10:21
поделиться