Alokovani velke pameti
Chtel bych se zeptat, jak resi Windows Mobile 2003 alokaci vice pameti, nez ma system k dispozici? Maji nejaky swapak? Nebo jakym zpusobem resit tu situaci, kdyz chci operovat s pameti radove ve stovkach mega?
Nema swap, jakozto real-time OS.
Resi se to postupnym nacitanim a zahazovani toho, co uz nepotrebuji. Pripadne si ten swapak udelam sam... ;)
Resi se to postupnym nacitanim a zahazovani toho, co uz nepotrebuji. Pripadne si ten swapak udelam sam... ;)
a neni to prilis nebespecne pro napriklad SD karty? neustale cteni a zapisovani, prece jen maji urcitou zivotnost...
No reseni jsou Memory mapovane soubory.
Jinak limitace 32MB per process se da resit treba takto (takzvany Mamaich's trik)
[CODE]
static void *myalloc(int size)
{
if(size<128*1024)
{
void *Ptr=malloc(size+4);
*((HANDLE*)Ptr)=0;
return 4+(char*)Ptr;
}
HANDLE H=CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE, 0,PAGE_READWRITE,
0,size+4, 0);
void *Ptr=MapViewOfFile(H,FILE_MAP_ALL_ACCESS, 0,0, size+4);
*((HANDLE*)Ptr)=H;
return 4+(char*)Ptr;
}
static void myfree(void* addr)
{
HANDLE H=*(HANDLE*)((char*)addr-4);
if(H==0)
{
free((char*)addr-4);
return;
}
UnmapViewOfFile((char*)addr-4);
CloseHandle(H);
}
[/CODE]
Jinak limitace 32MB per process se da resit treba takto (takzvany Mamaich's trik)
[CODE]
static void *myalloc(int size)
{
if(size<128*1024)
{
void *Ptr=malloc(size+4);
*((HANDLE*)Ptr)=0;
return 4+(char*)Ptr;
}
HANDLE H=CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE, 0,PAGE_READWRITE,
0,size+4, 0);
void *Ptr=MapViewOfFile(H,FILE_MAP_ALL_ACCESS, 0,0, size+4);
*((HANDLE*)Ptr)=H;
return 4+(char*)Ptr;
}
static void myfree(void* addr)
{
HANDLE H=*(HANDLE*)((char*)addr-4);
if(H==0)
{
free((char*)addr-4);
return;
}
UnmapViewOfFile((char*)addr-4);
CloseHandle(H);
}
[/CODE]
Ale pozor ten trik ti pomuze pouze alokovat maximum ale pouze z dostupne volne pameti. Swap CEcka opravdu nemaji. I kdyz memory mapovany soubory swapak dokazi dobre nasimulovat. Tam potom je potreba v tom CreateFileMapping predat handle nejakeho souboru. Ale nevim jestli to opravdu dobre funguje, protoze jsem to sam nezkousel. A je taky mozny ze to opravdu dokaze SD kartu "rychle" oddelat.