Foros del Web » Programación para mayores de 30 ;) » C/C++ »

localidad de memoria y direccion del siguiente dato

Estas en el tema de localidad de memoria y direccion del siguiente dato en el foro de C/C++ en Foros del Web. Hola, tengo una pregunta, se que por ejemplo teniendo un arreglo, por ejemplo int a[10]; int *ap,x; ahora para apuntar al primer elemnto del arrglo ...
  #1 (permalink)  
Antiguo 07/11/2010, 00:20
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 0
localidad de memoria y direccion del siguiente dato

Hola, tengo una pregunta, se que por ejemplo teniendo un arreglo, por ejemplo

int a[10];
int *ap,x;

ahora para apuntar al primer elemnto del arrglo haria esto:

ap=&a[0];
y se que si le incremento uno, apunta a la siguiente direccion del dato q le sigue, por ejemplo

ap=&a[0]+1;//entonces apuntaria a a[1]

y leyendo me encontré q lo que hace al incrementar +1, es como ya lo habia dicho apunta a la siguiente direccion del dato q le sigue, pero no a la siguiente localidad de memoria(yo pensaba q la direccion de un dato es lo mismo q la localidad de memoria de un dato),entonces esto quiere decir q al declarar mi arreglo los datos estan dispersados por q la memoria esta fragmentada, y entonces para solucionar esto seria manejando memoria dinámica?
  #2 (permalink)  
Antiguo 07/11/2010, 07:19
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: localidad de memoria y direccion del siguiente dato

Si vos declaras un array asi: int M[10], los 10 elementos van a estar seguidos. Sino dejaria de tener sentido.

Cuando uno le suma uno a una direccion de memoria, sucede que no esta aumentando en un byte la direccion de la memoria, sino que el compilador automaticamente, multiplica al uno por el tamaño de tu dato, para que se desplaze una cierta cantidad de byte, y caiga justamente en el siguiente elemento de un array.

Por ejemplo, los enteros (int) tienen un tamaño de 4bytes. Si le sumamos uno, se multiplicara por 4 para que el dezplazamiento sea de 4bytes.
  #3 (permalink)  
Antiguo 09/11/2010, 07:02
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: localidad de memoria y direccion del siguiente dato

entonces localidad de memoria y direccion de un registro y un dato no es lo mismo??, y si no es que es cada una?, gracias
  #4 (permalink)  
Antiguo 09/11/2010, 09:25
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: localidad de memoria y direccion del siguiente dato

Haber si puedes entender que es lo que pasa explicandotelo "graficamente".

Digamos que este es el segmento de memoria en el que corre tu programa

Código:
                         Byte No  1   2   3   4
                                          v   v   v   v
                   6000   --->   [   ][   ][   ][   ]
                   6004   --->   [   ][   ][   ][   ]
                   6008   --->   [   ][   ][   ][   ]
                   600C  --->   [   ][   ][   ][   ]
y declaras un arreglo int de con un tamaño de 4, al cual se le asigna la direccion 6000, entonces tendrias algo asi.

Código:
int arreglo[4];
                                Byte No  { 1   2   3   4 } => 4 bytes = 1 int
                                                   v   v   v   v         
   arreglo[0]  =   6000   --->   [   ][   ][   ][   ]
   arreglo[1]  =   6004   --->   [   ][   ][   ][   ]
   arreglo[2]  =   6008   --->   [   ][   ][   ][   ]
   arreglo[3]  =   600C  --->   [   ][   ][   ][   ]
como ya te lo explicaron, El compilador pos si mismo calcula los bytes que debe recorrer cuando le agregas un valor, es decir al hacer:

Código:
         arreglo[0]               //Direccion de memoria 6000, equivalente a arreglo +  0
         arreglo[1]               //Direccion de memoria 6004, equivalente a arreglo +  1
         arreglo[2]               //Direccion de memoria 6008, equivalente a arreglo +  2
         arreglo[3]               //Direccion de memoria 600C, equivalente a arreglo +  3
Cita:
entonces localidad de memoria y direccion de un registro y un dato no es lo mismo??, y si no es que es cada una?, gracias
Las localidades de memoria son los espacios en memoria donde se almacena información, para poder acceder a estas necesitamos de una direccion de memoria.

Es decir:

Código:
int arreglo[4];
arreglo[0] = 1;
arreglo[1] = 2;
arreglo[2] = 25;
arreglo[3] = -40;


                                Byte No  { 1   2   3   4 } => 4 bytes = 1 int
                                                   v   v   v   v         
   arreglo[0]  =   6000   --->   [   ][   ][   ][   ]    ------------->   Localidades de memoria
   arreglo[1]  =   6004   --->   [   ][   ][   ][   ]    ----------|
   arreglo[2]  =   6008   --->   [   ][   ][   ][   ]    ----------|
   arreglo[3]  =   600C  --->   [   ][   ][   ][   ]    ----------|
                             ^^^               
                               |                     
                               |-------------------------------------- Direcciones de memoria

 {1, 2, 25, -40} ----------> Datos
  #5 (permalink)  
Antiguo 10/11/2010, 02:30
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: localidad de memoria y direccion del siguiente dato

oh muchas gracias

Etiquetas: dato, direccion, memoria, siguiente
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:09.