Xem xét viết lại như sau, trong đó cho thấy một cách thức mà một trình biên dịch có thể thực hiện mã của bạn:
trống stackDirection (int * i) { struct __vars_stackDirection { int j; } * __ stackframe_stackDirection = malloc (sizeof (int));
if(&(__stackframe.j) > i)
cout<<"Stack is growing up \n"<<endl;
else
cout<<"Stack is growing down \n"<<endl;
} int main() {
struct __vars_main { int i; } * __ stackframe_main = malloc (sizeof (int));
stackDirection(&(__stackframe.i));
}
Bạn sẽ phải đồng ý rằng __stackframe_stackDirection
và __stackframe_main
sẽ cơ bản ngẫu nhiên. Ngăn xếp có thể lớn lên hoặc xuống.
Tệ hơn nữa, bạn đang giả sử một mô hình lineair. Hoặc là a<b, b<a, or a==b
. Nhưng đối với con trỏ này không giữ. Cả ba so sánh a<b, b<a and a==b
có thể sai cùng một lúc.
Và mã của bạn không hoạt động hoặc sự cố xảy ra ở đâu? – nothrow
Vấn đề là tôi không thể nói liệu mã này có đúng không – brett
imo một thử nghiệm tốt hơn sẽ được gọi tuần tự _alloca, vì các con trỏ ngăn xếp sẽ nằm trong cùng một khung ngăn xếp và sẽ không chịu bất kỳ tối ưu hóa trình biên dịch nào – Necrolis