<br><br><div class="gmail_quote">2011/4/27 Razvan Deaconescu <span dir="ltr">&lt;<a href="mailto:razvan.deaconescu@cs.pub.ro">razvan.deaconescu@cs.pub.ro</a>&gt;</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 class="im">On 04/23/2011 03:12 PM, Cosmin Stefan-Dobrin wrote:<br>
&gt; Si ca o scurta descriere a ce am facut in cod, initial am mapat (ca in<br>
&gt; exemplu), granular, fiecare pagina virtuala cu flagurile:<br>
&gt; VirtualAlloc(  addr, page_size, MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);<br></div></blockquote><div class="im"><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.<br>
<br>
&gt; si apoi, la maparea fisierului ram, realizez VirtualFree, Creez un<br>
&gt; FileMapping cu flagurile:<br>
&gt; CreateFileMapping(  file_handle,    NULL,   (DWORD) PAGE_READWRITE,  0, 0,<br>
&gt; NULL);<br></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><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
&gt;<br>
&gt; si mapez fisierul:<br>
&gt; MapViewOfFileEx(  mHandle,  desired_access,    0,<br>
&gt; file_page_no*page_size,   page_size, address);<br></div></blockquote><div><br><br></div></div>