我正在做一些递归解析。
目前我有一个假堆栈,我在其中存储有限状态机的状态,因此当我递归向下钻取时,我推送我所处的状态,并在处理完递归的文本位后将其弹出。
有一个“状态ID”堆栈会更快吗:
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)。