Tak jak w tytule, co to są ciągłe blokowanie pamięci?Co to jest sąsiadujący blok pamięci?
Odpowiedz
Brak jakichkolwiek luk w adresach, które zajmuje. Możesz prawdopodobnie pomyśleć o tym jako o "bloku" i pomyśleć o czymś z luką w środku jako "dwa bloki".
Termin pojawia się w definicji tablicy jako "przylegający". Oznacza to, że elementy są układane od końca do końca, bez żadnych nieciągłości i braku wyściółki między nimi (w każdym elemencie może znajdować się wypełnienie, ale nie między elementami). Więc tablica 5 elementów 4-bajtowych wygląda następująco (1 podkreślenia charakteru za bajtowy, | symbole nie reprezentują pamięć):
____ ____ ____ ____ ____
|____|____|____|____|____|
To nie wygląda tak:
____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|
I nie ma to wyglądać tak:
____ ____ ____ ____ ____
|____|____|____| ... somewhere completely different ... |____|____|
we wszystkich przypadkach, „wygląda” oznacza „w miarę adresy widoczne w C dotyczy”. W wirtualnej przestrzeni adresowej coś może być ciągłe, ale nie jest przylegające do fizycznej pamięci RAM. W tym przypadku coś może być przylegające do fizycznej przestrzeni adresowej RAM, ale w rzeczywistości nie sąsiadujące z fizyczną pamięcią RAM. Połowa może być na jednym układzie RAM tutaj, a druga połowa na innym układzie RAM. Ale model pamięci C nie może tego "zobaczyć".
Blok pamięci, który nie jest przerywany przez inną pamięć. Lub, mówiąc dokładniej, wymaga nieprzerwanego bloku wirtualnej przestrzeni adresowej. Prawdziwe kopiowanie pamięci RAM w przestrzeni adresowej nie musi być ciągłe.
Jest to ważne, jeśli przydzielono duży blok pamięci. System operacyjny musi przekazać go jako ciągły blok, ale jeśli pamięć jest tak podzielona, że tylko mniejsze elementy są wolne, to przydział pamięci nie może zostać osiągnięty, nawet jeśli całkowita wolna pamięć jest większa niż żądana przestrzeń.
To nie jest taki duży problem w 64-bitowych aplikacjach, ponieważ przestrzeń adresowa jest tam duża. Ale w procesach 32-bitowych może się zdarzyć, że sterty są tak pofragmentowane (pomiędzy zwolnionymi blokami są nadal niezablokowane bloki), że większe alokacje zawodzą.
Odpowiadając w kontekście alokowania pamięci, po wywołaniu alokatora pamięci i zażądaniu 24 bajtów pamięci, musi być możliwe zlokalizowanie pojedynczego bloku co najmniej 24 bajtów nieprzydzielonej pamięci.
Jeśli ma 16 bajtów pamięci zaczynając od jednego adresu x
i kolejne 8 bajtów zaczynając od adresu y
takie, że y > x + 16
lub y < x - 8
(które spowodowałoby lukę), wówczas podzielnik nie może spełnić żądania przez 24 bajtów, chociaż jest w sumie 24 bajty za darmo.
Zobacz także Fragmentation.
Blok pamięci jest ciągły dokładnie wtedy, gdy jest zdefiniowany przez początkowy i końcowy adres z pojedynczej liniowej przestrzeni adresowej i nie ma żadnych otworów.
to sąsiedni blok pamięci z pięciu bajtów, rozciąga się od położenia 1 do położenia 5:
to bajty (jasnoniebieskim), które są ze sobą w pamięci bez szczeliny bajty (biały) między nimi.
To nieciągłe zestaw pięciu bajtów zainteresowania:
jest podzielony na trzy grupy bajtów (żółty), począwszy od lokalizacji 1 ze szczeliną bajty się pomiędzy grupami. Bajki z przerwą znajdują się w miejscach 4 i 6.
+1 za kolorowe ilustracje :) – Michael
- 1. Co to jest blok w Yii2
- 2. Co to jest "blok synchronizacji" i wskazówki dotyczące zmniejszania liczby:
- 3. Co to jest rozgrzewanie wyczyszczonej pamięci podręcznej?
- 4. Co to jest awaria pamięci node.js?
- 5. Co to jest Serializable? Co to znaczy?
- 6. Dlaczego to jest wyciek pamięci
- 7. Co to jest obciążenie pamięci dla pojedynczych wątków systemu Windows?
- 8. Co to jest jednostka dla wartości pamięci w śledzeniach XDebug?
- 9. Co to jest "usuń to"?
- 10. Co to są elementy pamięci w marklogic?
- 11. Co to jest katalog główny?
- 12. Wyświetlacz: blok w linii - co to za przestrzeń?
- 13. Co to jest "Linq to SQL"?
- 14. Co to jest Pagel?
- 15. Co to jest _GLOBAL_OFFSET_TABLE?
- 16. Co to jest "android.R.layout.simple_list_item_1"?
- 17. Co to jest DetailsView.EnableModelValidation?
- 18. Co to jest NSPathStore2?
- 19. Co to jest czasownik = "*"?
- 20. Co to jest Postgresql_psycopg2?
- 21. Co to jest ?
- 22. co to jest .netrwhist?
- 23. co to jest Microsoft.Practices.EnterpriseLibrary.Data
- 24. Co to jest CGVector?
- 25. Co to jest $ {project.licensePath}?
- 26. co to jest alloc.h?
- 27. Co to jest PurpleEventCallback?
- 28. Co to jest global ::?
- 29. Co to jest? rodzaj?
- 30. Co to jest __meteor_bootstrap__?
+1 Ładna figura. –
@Sinan: dzięki, ćwiczę. –
+1 za tę odpowiedź, klasyczny. –