La pila crece "hacia abajo", es decir, de direcciones altas a direcciones bajas. En el diagrama de pila que se supone que debe rellenar, las direcciones están "invertidas" (la dirección 0x00000004 está abajo , la dirección 0x00000000, no está arriba), por lo tanto, en ese diagrama , la pila crece "hacia arriba".
(El punto a entender aquí es que no hay una noción de gravedad en la computadora; "arriba" y "abajo" son relativas a una dirección convencional, que puede ser la de una mesa en una hoja de papel, o la de valores de direcciones numéricamente crecientes, o lo que sea. Aquí, la tabla indica direcciones explícitamente, con flechas que confirman la convención.)
Por lo tanto, la palabra 0x12ab34cd (variable local a
) debe aparecer en las direcciones 0x00000014 a 0x00000017, inmediatamente por encima del puntero del marco almacenado. La matriz buffer
está inmediatamente por encima de eso (las direcciones 0x00000008 a 0x00000013).
Mientras la pila crece hacia direcciones "bajas" (el puntero de la pila se disminuye cuando se empuja un valor en la pila), el búfer se ordena hacia direcciones "altas" ( buffer[0]
está en La dirección 0x00000008, buffer[11]
se encuentra en la dirección 0x00000013).
El hecho de que la máquina sea "big-endian" es importante solo para el ordenamiento de bytes dentro de una sola palabra. No afecta el orden de aparición de las palabras dentro de la pila. Dicho de otro modo, que la pila está "bajando" no es una consecuencia de que la máquina sea "big-endian".
(Nota: ha habido algunas arquitecturas con pilas "creciendo" pero son bastante infrecuentes en estos días, y el ejercicio no tendría sentido con una pila de "crecer".)