Ich habe einen großen Puffer:
%Vor%Wenn ich einen neuen Prozess abgab, würde es einen Buf geben, der den Speicher mit dem Buf der Eltern teilte, bis der eine oder andere an ihn schrieb. Selbst dann müsste nur ein neuer 4-KByte-Block vom Kernel zugewiesen werden, der Rest würde weiterhin geteilt werden.
Ich würde gerne eine Kopie von buf machen, aber ich werde nur ein wenig von der Kopie ändern. Ich hätte gerne ein Copy-on-Write-Verhalten ohne Forking. (Wie Sie kostenlos beim Forking bekommen.)
Ist das möglich?
Sie möchten eine Datei auf der Festplatte oder ein gemeinsames POSIX-Speichersegment ( shm_open
) für den Block erstellen. Das erste Mal, ordnen Sie es mit MAP_SHARED
. Wenn Sie bereit sind, eine Kopie zu erstellen und zu COW zu wechseln, rufen Sie mmap
erneut mit MAP_FIXED
und MAP_PRIVATE
auf, um über die ursprüngliche Karte zu mappen, und mit MAP_PRIVATE
, um die zweite Kopie zu erstellen. Dies sollte Ihnen die gewünschten Effekte bringen.
Tags und Links c fork copy-on-write