bir derleyici kodunuzu uygulamak hangi bir şekilde ortaya çıkarır aşağıdaki yeniden yazımını düşünün:
geçersiz 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 ana() {
yapı __vars_main { int i; } * __ stackframe_main = malloc (sizeof (int));
stackDirection(&(__stackframe.i));
}
Sen __stackframe_stackDirection
ve __stackframe_main
esasen rastgele olacağını kabul etmek gerekir. Yığın yukarı veya aşağı büyüyebilir.
Daha da kötüsü, bir lineair modeli varsayıyorsunuz. Ya a<b, b<a, or a==b
. Ancak işaretçiler için bu geçerli değildir. Üç karşılaştırmanın tümü a<b, b<a and a==b
aynı anda yanlış olabilir.
Ve kodunuz çalışmıyor ya da sorun nerede? – nothrow
Sorun şu ki bu kodun doğru olup olmadığını söyleyemiyorum – brett
imo daha iyi bir test sıralı _alloca çağrıları olacaktır, yığın işaretçileri aynı yığın çerçevesinde olacak ve herhangi bir derleyici optimizasyonuna tabi olmayacaktır – Necrolis