Ich habe eine Speicherschnittstelle, die das Beschaffen von Adressraum von dem Anfügen von Unterstützungsspeicher trennt. (Unter Linux ist der Pool des Adressbereichs, der von der Schnittstelle verwaltet wird, MAP_ANONYMOUS und MAP_NORESERVE, madvised MADV_DONTNEED und mprotect'ed PROT_NONE. Die Sicherung wird dann von madvise MADV_WILLNEED und mprotect PROT_READ, PROT_WRITE und PROT_EXEC angehängt.)
Diese Schnittstelle erlaubt mir, eine große Menge an Adressraum zuzuweisen, während ich den tatsächlichen physischen Speicher langsam erhalte. Ich möchte das verwenden, um einen "faulen Vektor" zu erstellen, der Anforderungen für die Sicherung an geeigneten Stellen ablegt, aber niemals den aktuellen Inhalt des Vektors kopiert, wenn er wächst.
Ist angesichts der Semantik der Allokatoren der Standardbibliothek ein solches Schema möglich? Zeiger, Hinweise oder andere Anleitungen werden dankbar angenommen.
Es gibt in der Standard-Bibliothekszuweisungsschnittstelle keine Möglichkeit, die Größe eines vorhandenen Speicherblocks zu ändern. Es gibt nur "einen Block der Größe N zuweisen" und "einen Block freigeben" Semantik.
Die Antwort auf Ihre Frage lautet also "Nein, das können Sie nicht mit std::vector
"
Sie können natürlich Ihre eigene Vektor-ähnliche Klasse schreiben, die das tut - und wenn dies für Sie wichtig ist, sollten Sie dies tun. Das Schreiben einer Containerklasse ist nicht wirklich das schwer.