/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Como se almacenan las variables en la memoria

 
      Índice del Foro elrincondelc.com -> Otras Consultas
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Matteo



Registrado: 14 Nov 2008
Mensajes: 43
Ubicación: Argentina - Entre Rios

MensajePublicado: 11/12/2008 4:19 pm
Título: Como se almacenan las variables en la memoria

Tengo esta duda ( bueno y muchas otras, soy un bastaaaante curioso e intranquilo con lo referente a saber como funciona todo Rolling Eyes ) hace ya un tiempo, aver si alguien sabe:

Se que las variables son un monton de bits agrupados en bytes y a cada uno de estos le es dado una direccion de memoria.

Pero la pregunta es, donde se almacena el codigo que le dice "esto es un int", "esto es un array", "llamada a funcion", etc etc.
Tengo que aprender ASM si o si para saber esto?
Volver arriba
jaumegs



Registrado: 09 Oct 2005
Mensajes: 294

MensajePublicado: 11/12/2008 5:31 pm
Título:

Si realmente te interesa la programación te aconsejo aprender ensamblador, pues supone aprender como trabaja el procesador con la memoria y los periféricos, conceptos que de otra forma no comprenderías completamente.

Las variables se almacenan en la memoria (entendemos por memoria la memoria RAM) en una (o varias) dirección específica. Por ejemplo, en una arquitectura de 32 bits con direccionamiento de memoria byte a byte (la dirección N corresponde al byte [8 bits] X, la N+1 del byte Y, etc. y no a la palabra [32 bits] X, la palabra Y, etc.) y little endian, una variable X de 32 bits se almacena de la siguiente forma:
Código:
           +----------+
0x00000000 |          |
           +----------+
           |   ...    |
           +----------+
0x00003490 | X[0-7]   |
           +----------+
0x00003491 | X[8-15]  |
           +----------+
0x00003492 | X[16-23] |
           +----------+
0x00003493 | X[24-31] |
           +----------+
           |   ...    |
           +----------+
0xffffffff |          |
           +----------+


Un puntero a la variable X es un puntero a la dirección 0x00003490.

El procesador no entiende de tipos. Un puntero es una dirección de memoria y una variable es una colección de bits uno tras otro. Esta distinción la introducen los lenguajes de programación junto con los mecanismos para identificarlos. C por ejemplo solo los diferencia en tiempo de compilación, es decir, comprueba que el programa las utilice correctamente y el código generado supone que en la dirección N de memoria la variable X es del tipo T.

Saludos.
Volver arriba
marioxcc



Registrado: 17 Oct 2008
Mensajes: 171
Ubicación: México

MensajePublicado: 11/12/2008 6:26 pm
Título:

Puede ser de utilidad este artícuo sobre el endianness.
_________________
La computadora no se equivoca, el programador si.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2558
Ubicación: Valladolid (España)

MensajePublicado: 12/12/2008 12:50 am
Título:

Matteo escribió:
Pero la pregunta es, donde se almacena el codigo que le dice "esto es un int", "esto es un array", "llamada a funcion", etc etc.


Como ya te han dicho, los tipos son comprobados en la fase de compilación, ahora bien, el código (instrucciones) que determina el tamaño, niveles de direccionamiento y llamadas a función es almacenado en memoria cuando se carga el código ejecutable, este (valga la redundancia) se ejecuta mediante un puntero aleatorio (instrucción pointer). También hay que reseñar que los tipos compuestos son el resultado de la combinación de tamaños máximos que puede manejar el procesador sin usar código extendido, en estos casos el alineamiento de dichas variables puede (por optimización) no ser contiguo, (padding). Mas info wiki, google y meditacion trascendental.

*EOF*
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
Matteo



Registrado: 14 Nov 2008
Mensajes: 43
Ubicación: Argentina - Entre Rios

MensajePublicado: 12/12/2008 7:41 pm
Título:

Osea que en definitiva es la forma en que se llaman las instrucciones directamente, no existe tal cosa como un conjuntos de bytes destinados a decir que la memoria 0x1223fe (o la que se me ocurra) contiene un int u otro tipo, gracias a todos.

Cita:
Mas info wiki, google y meditacion trascendental.

Embarassed
Volver arriba
jaumegs



Registrado: 09 Oct 2005
Mensajes: 294

MensajePublicado: 13/12/2008 11:34 am
Título:

En C eso es correcto, pero depende del lenguaje y la interpretación que haga el compilador. Por ejemplo, en Smalltalk (un sistema de objetos), aunque el concepto de tipo no está definido, todos los objetos tienen un puntero a la clase de la que son instancia o lo que es lo mismo, un campo que indica su tipo (variables que contiene y métodos a los que responde). Algunas implementaciones de Lisp también reservan algunos bits para esta tarea.

En C no es necesario porque el compilador sabe el tipo de todas las variables que se utilizan en el programa, estáticas o dinámicas (en las dinámicas se indica con un casting al puntero void que retorna malloc), por lo que la información del tipo de las variables se almacena en el propio código. No ocurre lo mismo con Smalltalk y Lisp, pues son lenguajes que no diferencian entre la fase de compilación y ejecución. La estructura del código puede variar completamente durante la ejecución, haciendo que sea necesario almacenar explícitamente el tipo de las variables.

Para profundizar en este tema te recomiendo que estudies algo de teoría de lenguajes y computación y profundices con varios lenguajes de diferentes paradigmas (ensamblador [lenguaje máquina], C [imperativa], Lisp [funcional-declarativa], Prolog [lógica-declarativa], Smalltalk [OO pura]).

Saludos.
Volver arriba
      Índice del Foro elrincondelc.com -> Otras Consultas
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com