• Viernes 15 de Noviembre de 2024, 08:30

Autor Tema:  Re: Ayuda Con Manejo De Memoria  (Leído 1460 veces)

Miguelencho

  • Miembro activo
  • **
  • Mensajes: 53
    • Ver Perfil
Re: Ayuda Con Manejo De Memoria
« en: Jueves 9 de Septiembre de 2004, 14:55 »
0
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.
"The difference between the dreams and the accomplishment, is pure desire"

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Ayuda Con Manejo De Memoria
« Respuesta #1 en: Jueves 9 de Septiembre de 2004, 19:39 »
0
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++;
        }
    }

    return 0;
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

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

Miguelencho

  • Miembro activo
  • **
  • Mensajes: 53
    • Ver Perfil
Re: Ayuda Con Manejo De Memoria
« Respuesta #2 en: Lunes 13 de Septiembre de 2004, 03:18 »
0
gracias amigo me funciono asi, ahora otra pregunta como puedo sacar el segmento y el offset? de cada posicion
"The difference between the dreams and the accomplishment, is pure desire"

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Ayuda Con Manejo De Memoria
« Respuesta #3 en: Lunes 13 de Septiembre de 2004, 12:01 »
0
Hola.

A partir del código anterior, se puede poner ésto en el bucle central, que te irá dando el offset:
Código: Text
  1. int offset = (i&#60;&#60;6)|(j&#60;&#60;2);
  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.

Un saludo.

Ruben3d