• 31.05.2018
  • 3 minute de citit

In acest articol

Fiecare proces are o gramada implicita furnizata de sistem. Aplicatiile care efectueaza alocari frecvente din heap pot imbunatati performanta utilizand heap-uri private.

O gramada privata este un bloc de una sau mai multe pagini in spatiul de adrese al procesului de apelare. Dupa crearea heap-ului privat, procesul foloseste functii precum HeapAlloc si HeapFree pentru a gestiona memoria din acel heap.

Functiile heap pot fi, de asemenea, utilizate pentru a gestiona memoria in heap-ul implicit al procesului, utilizand manerul returnat de functia GetProcessHeap . Aplicatiile noi ar trebui sa utilizeze functiile heap in locul functiilor globale si locale in acest scop.

Nu exista nicio diferenta intre memoria alocata dintr-un heap privat si cea alocata utilizand celelalte functii de alocare a memoriei. Pentru o lista completa de functii, consultati tabelul din Functiile de gestionare a memoriei.

Nota

Un fir de executie ar trebui sa apeleze functiile de heap numai pentru heap-ul implicit al procesului si heap-urile private pe care thread-ul le creeaza si le administreaza, folosind manere returnate de functia GetProcessHeap sau HeapCreate .

Functia HeapCreate creeaza un obiect heap privat din care procesul de apelare poate aloca blocuri de memorie utilizand functia HeapAlloc . HeapCreate specifica atat o dimensiune initiala, cat si o dimensiune maxima pentru heap. Dimensiunea initiala determina numarul de pagini angajate, citite / scrise alocate initial pentru heap. Dimensiunea maxima determina numarul total de pagini rezervate. Aceste pagini creeaza un bloc adiacent in spatiul de adrese virtuale al unui proces in care heapul poate creste. Pagini suplimentare sunt trimise automat din acest spatiu rezervat daca cererile HeapAllocdepaseste dimensiunea actuala a paginilor angajate, presupunand ca stocarea fizica pentru aceasta este disponibila. Odata ce paginile sunt angajate, acestea nu sunt dezactivate pana cand procesul nu este terminat sau pana cand heap-ul este distrus apeland functia HeapDestroy .

Memoria unui obiect privat heap este accesibila doar procesului care l-a creat. Daca o biblioteca cu legaturi dinamice (DLL) creeaza o gramada privata, o face in spatiul de adrese al procesului care a numit DLL. Este accesibil doar acestui proces.

Functia HeapAlloc aloca un numar specificat de octeti dintr-un heap privat si returneaza un pointer la blocul alocat. Acest indicator poate fi utilizat in functiile HeapFree , HeapReAlloc , HeapSize si HeapValidate .

Memoria alocata de HeapAlloc nu este mobila. Adresa returnata de HeapAlloc este valabila pana cand blocul de memorie este eliberat sau realocat; blocul de memorie nu trebuie blocat.

Deoarece sistemul nu poate compacta un heap privat, acesta poate deveni fragmentat. Aplicatiile care aloca cantitati mari de memorie in diferite dimensiuni de alocare pot utiliza heap-ul cu fragmentare redusa pentru a reduce fragmentarea heap-ului.

O posibila utilizare a functiilor heap este crearea unui heap privat la pornirea unui proces, specificand o dimensiune initiala suficienta pentru a satisface cerintele de memorie ale procesului. Daca apelul catre functia HeapCreate esueaza, procesul poate termina sau notifica utilizatorului lipsa memoriei; daca reuseste, totusi, procesul este asigurat ca are memoria de care are nevoie.

Memoria solicitata de HeapCreate poate fi sau nu contigua. Memoria alocata intr-un heap de catre HeapAlloc este contigua. Nu trebuie sa scrieti sau sa cititi din memorie intr-o gramada, cu exceptia celei alocate de HeapAlloc si nici nu ar trebui sa va asumati vreo relatie intre doua zone de memorie alocate de HeapAlloc .

Nu ar trebui sa va referiti in niciun fel la memoria care a fost eliberata de HeapFree . Dupa ce memoria este eliberata, orice informatie care ar fi putut fi in ea a disparut pentru totdeauna. Daca aveti nevoie de informatii, nu eliberati memoria care contine informatiile. Apelurile functionale care returneaza informatii despre memorie (cum ar fi HeapSize ) nu pot fi utilizate cu memoria eliberata, deoarece pot returna date false.

Functia HeapDestroy distruge un obiect privat de heap. Dezactiveaza si elibereaza toate paginile obiectului heap si invalideaza manerul catre heap.

Compararea metodelor de alocare a memoriei

xxx casting italiani culi rotto
didilist culi sfondati
barbara devil porn culi sfondati porno
italian porno tubes culi sfondato
milf sfondata culi spaziali
luna rival porno culi squarciati
ccentoxcento culirotti
cristie dom porno culisfondati
la maison de l’amour culo a panettone
xxx famiglia culo a poppa
carolina vogue culo bagnato
cento x cento in streaming culo di fuori
roberta gemma .it culo di malena
hdporn69 culo grosso porn
xxx rocco sifredi culo grosso xxx
xxx segretaria culo in fuori
barbiely video culo malena
porno a roma culo rotto porn
malena la pugliese cumshot culo rotto porn
casting alla italiana video culo vip