Frage

Wie im Titel, was ist ein zusammenhängender Speicherblock?

War es hilfreich?

Lösung

Ein ohne Lücken in den Adressen, die er einnimmt. Sie können sich wahrscheinlich denken Sie nur an diese als „Block“, und denken Sie an etwas mit einer Lücke in der Mitte als „zwei Blöcke“.

Der Begriff kommt in der Definition eines Arrays auf, als „contiguous“ zu sein. Dass Mittel vorgesehen sind die Elemente, Ende-zu-Ende gelegt, wobei keine Diskontinuitäten und keine Polsterung zwischen ihnen (padding kann es in jedem Element, aber nicht zwischen den Elementen). So ein Array von 5 4-Byte-Elemente wie folgt aussieht (1 Unterstrich pro Byte, die | Sie Symbole nicht Speicher darstellen):

 ____ ____ ____ ____ ____
|____|____|____|____|____|

Es sieht nicht so aus:

 ____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|

Und weder sieht es wie folgt aus:

 ____ ____ ____                                           ____ ____
|____|____|____| ... somewhere completely different ...  |____|____|

In allen Fällen „sieht aus wie“ Mittel „so weit wie die Adressen sichtbar in C betroffen sind“. Etwas könnte in virtuellem Adressraum zusammenhängende, aber nicht zusammenhängend in physischem RAM. Was das betrifft, könnte etwas in physischem RAM-Adressraum zusammenhängende, aber nicht tatsächlich benachbart in physischem RAM. Die Hälfte davon könnte auf den einem RAM-Chip sein hier, und die andere Hälfte auf einem anderen RAM-Chip dort. Aber das C-Speichermodell nicht „sehen“ irgendetwas davon.

Andere Tipps

Dies ist ein zusammenhängender Speicherblock von fünf Bytes, von Ort zu Ort Spanning 1 5:

alt text

Es stellt Bytes (farbige hellblau), die zusammen im Speicher sind ohne Lücke Bytes (weiß) zwischen ihnen.

Dies ist ein nicht-zusammenhängender Satz von fünf Bytes von Interesse:

alt text

Es wird fragmentiert in drei Gruppen von Bytes (gelb gefärbt) mit Lückenbytes an Positionen 4 und 6 beginnend an der Stelle 1 gibt einen zusammenhängenden Block von drei Bytes, das ich von Standorten 1 bis 3. Es gibt zwei weitere Blöcke aus ein Byte jeweils an Positionen 5 und 7 dargestellt.

Der nicht verwendete Block an der Stelle 0 sowie alle nachfolgenden Blöcke jenseits Position 7 in der Regel ignoriert werden, da sie zwischen dem Bytes von Interesse von Standorten rund interpose tun 1 bis 7.

Ein Block von Speicher, der nicht durch andere Speicher unterbrochen wird. Oder um genauer zu sein erfordert einen ununterbrochenen Block des virtuellen Adressraumes. Die reale RAM Unterstützung, dass Adressraum nicht zusammenhängend sein muss.

Dies ist wichtig, wenn Sie einen großen Speicherblock zuordnen. Das Betriebssystem hat es als zusammenhängenden Block zu Ihnen geben, aber wenn der Speicher ist so fragmentiert, dass nur kleinere Stücke sind frei, dann kann diese Speicherzuordnung nicht einmal erfüllt werden, wenn der gesamte freie Speicher größer ist als der angeforderte Raum.

Das ist nicht so ein großes Problem auf 64-Bit-Anwendungen, da der Adressraum ist groß da. Aber in 32-Bit-Prozesse kann es vorkommen, dass der Haufen so fragmentiert wird (zwischen befreit Blöcke gibt es noch unfreed Blöcke), dass größere Zuweisungen fehlschlagen.

Die Beantwortung im Rahmen der Zuweisung von Speicher, wenn Sie die Zuordnungsspeicher aufrufen und Anforderung 24 Byte Speicher, muss es in der Lage einen einzelnen Block von mindestens 24 Bytes von nicht zugewiesenen Speicher zu lokalisieren.

Wenn es hat 16 Byte Speicher ab einer Adresse x und weitere 8 Bytes an einer Adresse y beginnen, so dass y > x + 16 oder y < x - 8 (die eine Lücke schaffen würde), dann kann der Zuordner erfüllen nicht Ihre Anfrage für 24 Bytes, obwohl es ist insgesamt 24 Bytes frei.

Siehe auch Fragmentation .

Ein Speicherblock ist genau zusammenhängender, wenn es durch eine Start- und eine Endadresse von einem einzigen linearen Adressraum definiert ist, und hat keine Löcher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top