Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

Alokovani velke pameti

cubas_ce4you (419)|9.9.2005 13:31
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?
beecher (9270)|9.9.2005 13:38
Nema swap, jakozto real-time OS.

Resi se to postupnym nacitanim a zahazovani toho, co uz nepotrebuji. Pripadne si ten swapak udelam sam... ;)
cubas_ce4you (419)|9.9.2005 14:04
a neni to prilis nebespecne pro napriklad SD karty? neustale cteni a zapisovani, prece jen maji urcitou zivotnost...
beecher (9270)|9.9.2005 14:18
Je, vzdyt od toho v Dynavixu upustili... ;)
cubas_ce4you (419)|9.9.2005 14:44
nerozumim...

takze, jake je reseni?
Bobris (37)|16.9.2005 16:48
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]
cubas_ce4you (419)|16.9.2005 18:33
super, dik
Bobris (37)|16.9.2005 21:42
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.