2016-03-31 5 views
2

Ich habe mich nur gefragt, ob es überhaupt möglich ist, Memory-Mapped-Dateien in Portable C oder C++ zu verwenden. Ich denke nicht, weil, soweit ich weiß, kein Standard die Existenz von Speicherkarten erkennt.Erkennt ein C- oder C++ - Standard die Existenz von Speicherabbilddateien?

Mit Speicherzuordnungen ist es möglich, das gleiche Byte an zwei Adressen zu haben. Außerdem denke ich, dass es nicht möglich ist, ein Stück Speicher zu verwenden, ohne zuerst ein Objekt dort zu konstruieren (außer durch char*). Wenn wir also eine existierende abgebildete Datei als ein Array von ganzen Zahlen behandeln wollen, die ein undefiniertes Verhalten sein sollten.

Also, was ist die Situation in Bezug auf Memory-Mapped-Dateien und den Standard?

+2

Nein, es gibt keine Vorstellung über _memory mapped files_ in Standards AFAIK. –

+0

Die Suche nach dem C++ 14-Standard für * memory mapped * ergibt 0 Ergebnisse. – NathanOliver

+0

Sie können den von 'malloc()' zugewiesenen Speicher als ein Array von beliebigem Typ verwenden (vorausgesetzt, die Zuweisung ist groß genug), siehe C11-Entwurfsnorm n1570, * 6.5 Ausdrücke 6 effektiver Typ *. Es gibt keinen Grund, warum Sie nicht in der Lage sein sollten, dasselbe mit dem von 'mmap()' zugewiesenen Speicher zu tun. – EOF

Antwort

5

Sie nicht. Speichermapping wird in der Regel von Betriebssystemen angeboten: C und C++ können auch ohne eines laufen. Eine solche Verfügbarkeit auf der Palette von Plattformen, auf die die Sprachen zielen, zu begrenzen, wäre sehr einschränkend.

Dateien können auch in freistehenden Umgebungen überhaupt nicht unterstützt werden, geschweige denn Speicherkarten.

3

Ich habe mich nur gefragt, ob es überhaupt möglich ist, Memory-Mapped-Dateien in portable C oder C++ zu verwenden.

Ja, es ist (in C++), finden Sie in der Boost.Interprocess Bibliothek http://www.boost.org/doc/libs/1_60_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file

Ich denke nicht, denn soweit ich weiß, kein Standard die Existenz von Speicherdateien abgebildet erkennt.

nein es ist nicht in einem Standard, es ist in der Boost-Bibliothek, die fast so tragbar ist.

Mit Speicherzuordnungen ist es möglich, das gleiche Byte an zwei Adressen zu haben. Ich denke auch, dass es nicht möglich ist, ein Stück Speicher zu verwenden, ohne zuerst ein Objekt dort zu konstruieren (außer durch char *). Wenn wir also eine existierende abgebildete Datei als ein Array von ganzen Zahlen behandeln wollen, die ein undefiniertes Verhalten sein sollten.

Siehe Dokumentation oben. Sie werden feststellen, dass C++ - Objekte direkt in den gemeinsamen Speicher mappen, aber durch spezielle "Offset" -Zeiger vom Anfang des zugeordneten Speicherbereichs an adressiert werden.

Also, was ist die Situation in Bezug auf Memory-Mapped-Dateien und den Standard?

Es gibt keine Situation. Sie sind nicht Teil des Standardspeichermodells.

Verwandte Themen