[so] tema 3 win - MapViewOfFileEx

Irina Stanescu ironmissy at gmail.com
Tue May 5 17:49:47 EEST 2009


Pana la urma am renuntat la FileMapping si la MapViewOfFile, in ciuda
recomandarii din enuntul temei *"*Paginile de memorie virtuală (din spațiul
de adresă al procesului) se pot mapa individual *direct peste fișierul de
RAM* folosind funcțiile mmap (Linux) și
MapViewOfFileEx<http://msdn.microsoft.com/en-us/library/aa366763%28VS.85%29.aspx>(Windows).
"

Probabil ca daca nu exista aceasta recomandare, as fi incercat sa caut alta
solutie de la bun inceput.

Tema se poate rezolva respectand cerintele folosind numai VirtualAlloc,
VirtualFree si apeluri de I/O.


Irina


În data de 5 mai 2009, 16:36, andreea sandu <sandu_adina2006 at yahoo.com> a
scris:

> Pentru a respecta cerinta temei "Paginile din acest spațiu nu trebuie sa
> fie prezente și în memoria RAM după apelul funcției vinit/VirtualInit"[1]
> ar trebui sa folosim VirtualAlloc cu parametrul MEM_RESERVE. Din cate observ
> nu se poate face free pe o pagina alocata cu MEM_RESERVE, ci doar pe tot
> spatiul incepand de la *lpAddress:
> *MEM_RELEASE
>
> Releases the specified region of pages. After this operation, the pages are
> in the free state.
>
> If you specify this value, *dwSize* must be 0 (zero), and *lpAddress* must
> point to the base address returned by the**<http://msdn.microsoft.com/en-us/library/aa366887%28VS.85%29.aspx>VirtualAlloc function when the region is reserved. The function fails if
> either of these conditions is not met.
>
>
> MapViewOfFileEx nu il putem folosi pe zone din spatiul de adresa deja
> alocate:
>
> the function succeeds if the specified memory region is not already in use
> by the calling process.
>
> Prin urmare nu vad cum am putea sa respectam si cerinta [1] si sa si mapam
> paginile din memoria virtuala direct peste fisierul care simuleaza ram-ul.
> ------------------------------
> **
>
> Din cate stiu, nu poti utiliza API-ul MapViewOfFile(Ex) cu zone de
> memorie alocate cu VirtualAlloc(Ex) si invers.
>
> Poti sa faci rezervarea de memorie virtuala cu VirtualAlloc(Ex) si, la
> maparea de pagini din fisierul RAM, sa faci VirtualFree(Ex) pe pagina
> dorita si in locul ei remapezi o pagina din RAM cu MapViewOfFileEx.
>
> --
> Mircea
> http://mircea.bardac.net
> _______________________________________________
> so mailing list
> so at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>
>
> _______________________________________________
> so mailing list
> so at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090505/e050e765/attachment.htm>


More information about the so mailing list