Considere lo siguiente reescritura, que expone de una manera en la que un compilador puede implementar su código:
vacío 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));
}
Vas a tener que aceptar que __stackframe_stackDirection
y __stackframe_main
habrá esencialmente aleatoria. La pila puede crecer hacia arriba o hacia abajo.
Peor aún, usted está asumiendo un modelo linealir. O bien a<b, b<a, or a==b
. Pero para los indicadores esto no se sostiene. Las tres comparaciones a<b, b<a and a==b
pueden ser falsas al mismo tiempo.
¿Y su código no funciona, o dónde está el problema? – nothrow
El problema es que no puedo decir si este código es correcto – brett
una prueba mejor sería llamadas _alloca secuenciales, ya que los punteros de la pila estarían en el mismo marco de la pila y no estarían sujetos a optimizaciones del compilador – Necrolis