Salutare,<br><br>Am incercat si doar cu MEM_RESERVE. Mersi pentru explicatii.... Anyway, ideea e ca nici asa nu merge. <br><br>Ce mi se pare mie ciudat e faptul ca daca w_sync_mapping (din tester, linia 492) e apelat cu 1 testul merge. :(<br>
<br>Nu stiu ce as putea sa mai fac... :(<br><br>Cosmin<br clear="all"><br><br><div class="gmail_quote">2011/4/27 Adrian Scoica <span dir="ltr"><<a href="mailto:adrian.scoica@gmail.com">adrian.scoica@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br><br><div class="gmail_quote"><div class="im">2011/4/27 Razvan Deaconescu <span dir="ltr"><<a href="mailto:razvan.deaconescu@cs.pub.ro" target="_blank">razvan.deaconescu@cs.pub.ro</a>></span><br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
<div>On 04/23/2011 03:12 PM, Cosmin Stefan-Dobrin wrote:<br>
> Si ca o scurta descriere a ce am facut in cod, initial am mapat (ca in<br>
> exemplu), granular, fiecare pagina virtuala cu flagurile:<br>
> VirtualAlloc( addr, page_size, MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);<br></div></blockquote></div><div><br>MEM_RESERVE functioneaza asemanator cu operatira de reserve de la alocatorii din C++: iti garanteaza ca memoria respectiva va fi libera in viitor, dar NU ti-o aloca/mapeaza(sau in C++, instantiaza). <br>
<br>Tu ai nevoie ca ea sa fie rezervata ca sa poti apoi sa faci commit pe bucatele (pagina cu pagina). In Windows, daca nu le mapezi pagina cu pagina, nu mai poti fragmenta dupa aia, si folosesti intai reserve si apoi commit ca sa te asiguri ca ai la dispozitie un loc suficient de mare sa le poti mapa consecutiv pe toate. <br>
<br>Teoretic, poti face si acum ai facut tu, daca faci VirtualFree dupa commit, dar codul rezultat NU este thread-safe (intre VirtualFree si urmatorul VirtualAlloc(...MEM_COMMIT...) s-ar putea ca alt thread sa mapeze ceva in spatiul ala prin malloc sau VAlloc.<div class="im">
<br>
<br>
> si apoi, la maparea fisierului ram, realizez VirtualFree, Creez un<br>
> FileMapping cu flagurile:<br>
> CreateFileMapping( file_handle, NULL, (DWORD) PAGE_READWRITE, 0, 0,<br>
> NULL);<br></div></div><div><br>Este suficient sa faci un singur mapping la inceput. Dupa aceea poti folosi handle-ul respectiv ca sa faci MapViewOfFileEx de oricate ori ai nevoie. Sa nu uiti sa il si inchizi la sfarsit.<br>
</div><div class="im"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"><div>
><br>
> si mapez fisierul:<br>
> MapViewOfFileEx( mHandle, desired_access, 0,<br>
> file_page_no*page_size, page_size, address);<br></div></blockquote><div><br><br></div></div></div>
<br>_______________________________________________<br>
<a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii" target="_blank">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a><br></blockquote></div><br>