Pedir mucha memoria al S.O.

10/09/2003 - 19:54 por Diego | Informe spam
Buenas, estoy realizando un programa que necesita pedir al sistema operativo
del orden de unos 40 megas de memoria dinamica, el caso es que usando malloc
esto me ha sido completamente imposible pues para tamaños superiores a un
mega de memoria dinamica reservada, comienzo a obtener errores (al parecer
tiene algo que ver con el tamaño del heap o algo asi).
Mi duda es si hay alguna metodo para poder pedir al sistema operativo la
cantidad de memoria dinamica que necesite. Muchas gracias.

Preguntas similare

Leer las respuestas

#1 christian
10/09/2003 - 20:44 | Informe spam
asi:

#include <windows.h>

char* my_memalloc(DWORD size)
{
unsigned char* ptr = NULL;

ptr = (unsigned char*)::GlobalAlloc(GPTR,size);

return ptr;
}


void my_memfree(unsigned char* ptr)
{
try
{
if(ptr)
::GlobalFree(ptr);
}catch(...)
{
}
}

void testmem()
{
unsigned char* ptr = NULL;

ptr = my_memalloc(40000000L);

if(ptr)
{
//todo ok

//usa la memoria en ptr
//no pierdas el puntero y recuerda liberarle
//es memoria de windows, si no la liberas
//queda asignada aunque termines el programa.

strcpy((char*)ptr,"CHRISTIAN SALAZAR");

my_memfree(ptr);
}
else
{
// revisa la configuracion de memoria virtual de tu pc
// demasiado extraño este error en condicionesnormales
}

}
Respuesta Responder a este mensaje
#2 Diego
10/09/2003 - 23:49 | Informe spam
Muchisimas gracias Christian, me salvas la vida! ;-)
No conocia esas funciones Global, pero buscando en el MSDN informacion sobre
ellas he visto esto:

Note The global functions are slower than other memory management functions
and do not provide as many features. Therefore, new applications should use
the heap functions. However, the global functions are still used with DDE,
the clipboard functions, and OLE data objects.

Se puede hacer lo mismo con las citadas "heap functions" y con las "Global
functions". En tal caso, ¿Cual seria mas adecuado usar?
De nuevo, muchas gracias.
Respuesta Responder a este mensaje
#3 Tomas Restrepo \(MVP\)
11/09/2003 - 01:50 | Informe spam
Hola Diego,

Muchisimas gracias Christian, me salvas la vida! ;-)
No conocia esas funciones Global, pero buscando en el MSDN informacion


sobre
ellas he visto esto:

Note The global functions are slower than other memory management


functions
and do not provide as many features. Therefore, new applications should


use
the heap functions. However, the global functions are still used with DDE,
the clipboard functions, and OLE data objects.

Se puede hacer lo mismo con las citadas "heap functions" y con las "Global
functions". En tal caso, ¿Cual seria mas adecuado usar?



Normalmente, yo usaria las de Heap, pero en tu caso no veo problema, pues
realizarias por lo que veo la alocacion con poca frecuencia (por lo tnato no
habria mayor impacto en desempeño).

Sin embargo, si realmente requieres mucha memoria, una buena idea puede no
usar estas instrucciones en primer lugar, sino VirtualAlloc(), para
solicitarle al SO que reserve una porcion grande de memoria, y solo
comprometer pedazos a medida que lo necesites. Esto permite que el SO ahorre
memoria en su manejo interno de las paginas, y que evites paginacion
inecesaria, y es util en casos en que aunque uno necesita mucha memoria,
mucha de ella puede estar vacia en un momento dado o se llena por partes.

Tomas Restrepo

Respuesta Responder a este mensaje
#4 Diego
11/09/2003 - 05:17 | Informe spam
Muchas gracias Tomas por la respuesta.

El metodo que me ha indicado Christian ha cumplido perfectamente con lo que
venia buscando, aun asi ya que he empezado a profundizar en memoria
dinamica, voy a echar un vistazo a los demas metodos que permite Windows
empezando por el que me has citado de VirtualAlloc para intentar encontrar
el mas eficiente y asi poder usar el que proceda segun la ocasion.
Una cosa esta clara. hasta hoy pensaba que malloc y new podian satisfacer
todas mis necesidades de memoria y desde esta tarde estoy pateandome toda la
seccion "Memory Management" del MSDN jejejeje.

Saludos y gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida