Tôi đang thực hiện một số phân tích cú pháp đệ quy.Là một ngăn xếp giả nhanh hơn một chồng thực
Hiện tại tôi có một ngăn xếp giả, nơi tôi lưu trữ trạng thái cho máy trạng thái hữu hạn của mình, vì vậy khi tôi đi xuống đệ quy, tôi đẩy trạng thái của mình vào và sau đó đã xử lý xong đoạn văn bản đệ quy .
Nó sẽ được nhanh hơn để có một 'id trạng thái' chồng như:
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));
}
Hoặc nó sẽ là nhanh hơn để phân chia các điều lên thành các hàm thích hợp và để cho C++ lo lắng về chồng.
(Tôi biết ai đó sẽ cho tôi biết 'đó là C, nó không phải là C++', vì vậy tôi trả lời trước một cách trống rỗng, chương trình C++ của tôi nhưng có rất nhiều c trong đó).
Cá nhân tôi sẽ mong đợi các chức năng bình thường sẽ nhanh hơn .. nhưng ai đó nghĩ nhiều hơn tôi nghĩ rằng việc xếp chồng giả này nhanh hơn. Bây giờ tôi muốn xem thêm ý kiến từ những người điều hơn tôi :) – matiu
@matu Nó phụ thuộc vào máy. Trên Sparc, một cuộc gọi hàm yêu cầu truy cập bộ nhớ bằng không, và có thể nhanh hơn đáng kể. Trên Intel, bạn sẽ tiết kiệm được địa chỉ trả về và con trỏ khung trong bộ nhớ, cộng với bất kỳ đối số nào mà hàm yêu cầu: có thể rất tốn kém. –