Ist NSData / Datenspeicher zusammenhängend?

8

Werden Daten / NSData-Bytes garantiert im zusammenhängenden Speicher gespeichert? Betrachtet man die Dokumentation ( Ссылка ), habe ich den Eindruck, dass man auf eine zusammenhängende Darstellung der Bytes zugreifen kann mit withUnsafeBytes() oder withUnsafeMutableBytes() . Es ist jedoch möglich, dass die Bytes aus nicht zusammenhängendem Speicher in einen zusammenhängenden Block kopiert werden, wenn diese Methoden aufgerufen werden.

Ich denke, es wäre etwas ineffizient, die Bytes beim Zugriff über die Methoden withUnsafe... zu kopieren, und die Bytes werden offensichtlich zusammenhängend gespeichert, wenn der init(bytesNoCopy: ...) Initialisierer verwendet wird. Daher denke ich, dass sie immer gespeichert werden zusammenhängend, aber haben keine Dokumente gesehen, die so ausdrücklich angeben.

    
Anatoli P 19.11.2016, 02:49
quelle

2 Antworten

6

Nein, Daten werden nicht garantiert im zusammenhängenden Speicher gespeichert. Wenn Sie withUnsafeBytes oder withUnsafeMutableBytes verwenden, wird es jedoch an einen Speicherort kopiert, an dem die Daten in einem einzelnen zusammenhängenden Block vorliegen. Wenn Sie diesen Mehraufwand vermeiden möchten, rufen Sie enumerateBytes auf wird, wenn die Daten momentan nicht zusammenhängend sind, die Schließung einmal für jeden der getrennten Speicherblöcke aufrufen, wodurch der Aufwand des Kopierens der vollständigen Daten in einen neuen zusammenhängenden Block vermieden wird.

    
Rob 19.11.2016, 03:23
quelle
1

Das Vorhandensein von withUnsafeBytes ist eine Möglichkeit zu dokumentieren, dass sie sich das Recht vorbehalten, die Bytes nicht zusammenhängend zu speichern, sondern sie bei Bedarf auf diese Weise bereitstellen können.

Dies könnte daran liegen, dass sie sich vorstellen, dass NSData in speicherbeschränkte Umgebungen portiert werden und sie keinen systemabhängigen Code haben wollen.

    
Lou Franco 19.11.2016 02:59
quelle

Tags und Links