使用 GlobalMemoryMemoryStatus 查看系統記憶體的狀況,大約有80幾MB 的Free Physical Memory。
但是到了APP 底下卻只剩下30MB左右。
原來,在WINCE底下, 記憶體是相當受限的,每個Process 分到一個 32MB slot,而這個32MB就要包含了 DLL, heaps, stacks, virtual memory space...等所有的使用。
http://msdn.microsoft.com/en-us/library/ms836325.aspx
解決之道 就是使用 VirtualAlloc 代替 new, malloc
在MEM_RESERVE 時,如果 size 超過 2MB 且為PAGE_NOACCESS時,系統會使用 LMA (address 4200 0000~ 8000 0000) 的空間。讓出更多space 給AP。
代碼如下:
ptrVirt = VirtualAlloc( NULL, 1024 * 1024 * 32, MEM_RESERVE, PAGE_NOACCESS);
RasterDataBuffer = (BYTE*)VirtualAlloc( ptrVirt, PrintingWidth * PrintingHeight * 3, MEM_COMMIT, PAGE_READWRITE);
沒有留言:
張貼留言