Programación General => C/C++ => Mensaje iniciado por: Miguelencho en Jueves 9 de Septiembre de 2004, 14:55
Título: Re: Ayuda Con Manejo De Memoria
Publicado por: Miguelencho en Jueves 9 de Septiembre de 2004, 14:55
ok amigos, ahora si se lo que tengo que hacer pero no se como, necesito cargar el contenido del primer k de memoria en un arreglo tipo long [16][16], hasta alli vamos bien se que se puede hacer ya que tengo 256 posiciones que me pueden almacenar 4 bytes cada una (long), ahora eso lo hago a traves de un puntero, aqui comienzan las preguntas......
Como inicializo mi puntero para que me cargue el contenido del byte 0 al 1024, se que se debe utilizar un ciclo de repeticion pero como hago para que el puntero vaya moviendose byte a byte y cargandome el contenido que quiero en el arreglo?
podria usar algo asi
long far *mi_puntero; mi_puntero = (incializarlo en 0); //no se como hacerlo for (int i = 0; i < 16; i++) for (int j = o; j < 16; j++) vector_contenido [j] = new (mi_puntero); //es solo una idea no se si esta ok.
Título: Re: Ayuda Con Manejo De Memoria
Publicado por: Ruben3d en Jueves 9 de Septiembre de 2004, 19:39
Hola.
Para inicializar el puntero e ir leyendo la memoria has de hacer esto: <!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->// // main.cpp //
#define MAX 16
#include <stdlib.h>
int main() { int matriz[MAX][MAX]; int *puntero = NULL; // Es una macro que se refiere a la posición 0.
for (int i=0; i<MAX; i++) { for (int j=0; j<MAX; j++) { matriz[i][j] = *puntero; puntero++; } }
El puntero se mueve de 4 en 4 bytes, que es el tamaño de cada int que se lee. De todas formas, la protección de memoria no debería dejarte leer ahí.
Un saludo.
Ruben3d
Título: Re: Ayuda Con Manejo De Memoria
Publicado por: Miguelencho en Lunes 13 de Septiembre de 2004, 03:18
gracias amigo me funciono asi, ahora otra pregunta como puedo sacar el segmento y el offset? de cada posicion
Título: Re: Ayuda Con Manejo De Memoria
Publicado por: Ruben3d en Lunes 13 de Septiembre de 2004, 12:01
Hola.
A partir del código anterior, se puede poner ésto en el bucle central, que te irá dando el offset:
Código: Text
int offset = (i<<6)|(j<<2);
Si te fijas, el valor va desde 0 a 1023-4, ya que el bucle se mueve de cuatro en cuatro bytes (por eso está el <<2). El <<6 es debido a que hay que hacer hueco a j, que ocupa cuatro bits y ha sido desplazado otros dos. El tamaño total es de 10 bits. Esto solo funciona si las variables i,j oscilan en el rango [0,16).
El segmento es en todo caso 0, ya que no se superan los 64kb.