Asignacion de memoria estatica

Asignacion de memoria estatica

de Gianni Victorio Mondino Medvedeo -
Número de respuestas: 1
Entiendo que debemos hacer (o aproximarnos lo mas posible) a lo que seria la compilacion del programa, desconozco como funciona la reserva de memoria estatica (si es que efectivamente se "reserva" dicha memoria), al momento de declarar una variable o constante. Dicho esto tengo al comienzo de mi programa en c algunas variables globales y la definicion del arreglo de shorts (arbol), deberia antes de que comienze a ejecutar main indicar que esta memoria va a ser utilizada o con usar determinadas entradas de la memoria al momento de la asignacion de dichas variables es suficiente ?
En respuesta a Gianni Victorio Mondino Medvedeo

Re: Asignacion de memoria estatica

de Gustavo Brown -

Gianni,

  Las variables en alto nivel se traducen a distintas variables en bajo nivel dependiendo del contexto en que aparezcan y su vida util. No es lo mismo una variable local a una rutina que posiblemente la asignes a algún registro disponible en el momento que una variable global.

Para el caso en que definas variables globales a tu programa (como ser el Arbol) simplemente al compilarla a bajo nivel le asignas la región de memoria que consideres apropiada (la letra te pide que la asignes a partir del desplazamiento 0 del segmento ES). Luego en tu programa cada vez que referencies el arbol lo harás a través del segmento ES

Para el resto de las variables globales que tengas en alto nivel basta con que las definas em assembler en el segmento de datos usando etiquetas para darle nombres y las directivas que reservan memoria (db, dw, etc). Esas quedan automáticamente definidas en el segmento de datos DS y el desplazamiento que les corresponde lo determina el propio ensamblador. Luego en tu programa cada vez que referencies estas variables globales lo harás a través del segmento DS. Tener cuidado que no se "choquen" las direcciones de memoria efectivas de las variables en DS respecto al árbol. Esto se puede hacer cargando ES con algun valor más elevado, por ejemplo 0x1000.

Por último, las constantes no son variables (justamente son constantes) por lo que en bajo nivel pueden traducirse a EQUs

Saludos,
  Gustavo