Ich habe eine fragmentierte Struktur im Speicher, und ich möchte es als eine zusammenhängend aussehende Gedächtnisansicht zugreifen. Gibt es einen einfachen Weg dies zu tun oder sollte ich meine eigene Lösung implementieren?Wie erstellt man eine Speicheransicht für einen nicht zusammenhängenden Speicherort?
Betrachten Sie beispielsweise ein Dateiformat, das aus Datensätzen besteht. Jeder Datensatz hat einen Header fester Länge, der die Länge des Inhalts des Datensatzes angibt. Eine logische Struktur höherer Ebene kann sich über mehrere Datensätze erstrecken. Es würde das Implementieren der Struktur auf höherer Ebene einfacher machen, wenn es seinen eigenen fragmentierten Speicherort als ein einfaches zusammenhängendes Array von Bytes sehen könnte.
Update:
Es scheint, dass Python unterstützt diese 'segmentiert' Puffer intern geben, zumindest bezogen auf this part of the documentation. Aber das ist nur die C-API.
Update2:
Soweit ich sehe, die referenzierte C API - im alten Stil Puffer genannt - das tut, was ich brauche, aber es ist jetzt veraltet und nicht verfügbar in neuerer Version von Python (3.X) . Das neue Pufferprotokoll - spezifiziert in PEP 3118 - bietet eine neue Möglichkeit, Puffer darzustellen. Diese API ist in den meisten Anwendungsfällen (z. B. Anwendungsfälle, in denen der dargestellte Puffer nicht zusammenhängend ist) besser benutzbar, unterstützt jedoch nicht diese spezielle, bei der ein eindimensionales Array vollständig frei ausgelegt werden kann (mehrfach anders) Größe Chunks) im Speicher.
Erstens ist eine Datei selten eine Speicherstruktur. Zweitens, warum und auf welche Weise müssen Sie auf Low-Level-Speicherstrukturen zugreifen und es sogar mit Python machen? Die Frage scheint zum Beispiel für C oder C++ oder andere Sprachen mit Dev-gesteuerter Speicherzuordnung und -zugriff besser geeignet zu sein. – alko
Eine verknüpfte Liste durchlaufen und jede Daten drucken? – perreal
Eine Datei wird zu einer Speicherstruktur, wenn Sie sie mit mmap (auch in Python verfügbar) verknüpfen. Ja, es ist möglich, eine verkettete Liste zu durchlaufen, aber der Punkt ist, dass ich mit einer einfachen Schnittstelle wie der Schnittstelle von memoryview darauf zugreifen möchte. Ich denke, es ist möglich, da die Dokumentation erwähnt, dass Sie es verwenden können, um nicht zusammenhängende Daten (z. B. NumPy-Arrays) zuzugreifen. – molnarg