realloc()-Speicherbedarf

11/05/2010 - 19:59 von Ole Streicher | Report spam
Hallo,

welchen (maximalen) Speicherbedarf hat eigentlich realloc()? Betràgt der
old_size + new_size oder max(old_size, new_size) bzw. hàngt das von der
konkreten Implementation (hier konkret: Linux, MacOS) ab?

Konkret: Kann ich (unter einem 32 bit OS) realloc() verwenden, um einen
2,2 GB großen Bereich auf 2,3 GB zu vergrößern oder wird das fehlschlagen?

Und kann man davon ausgehen, dass realloc() bei solchen Aktionen das
Kopieren vermeidet (also z.B. nur chunk-Pointer verstellt und nicht den
gesamten Bereich kopiert)?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Jan Seiffert
12/05/2010 - 03:11 | Warnen spam
Ole Streicher schrieb:
Hallo,

welchen (maximalen) Speicherbedarf hat eigentlich realloc()? Betràgt der
old_size + new_size oder max(old_size, new_size) bzw. hàngt das von der
konkreten Implementation (hier konkret: Linux, MacOS) ab?




Das haengt sowohl von der technischen Moeglichkeit (kann das mapping einfach
"hinten" verlaengert werden) als auch der Implementation ab (also macht der Std.
Allokator das auch wirklich).

Konkret: Kann ich (unter einem 32 bit OS) realloc() verwenden, um einen
2,2 GB großen Bereich auf 2,3 GB zu vergrößern oder wird das fehlschlagen?




Da du da wirklich mit echt "grossen Kram" rumfurwerkst der Grenzverhalten
triggern kann, wuerd ich sagen du musst von old_size + new_size mit copy
ausgehen (was dann konkret natuerlich toedlich ist).

Und kann man davon ausgehen, dass realloc() bei solchen Aktionen das
Kopieren vermeidet (also z.B. nur chunk-Pointer verstellt und nicht den
gesamten Bereich kopiert)?




Nein.

Da du dich da im Grenzbereich von 32Bit bewegst wuerd ich das selbst in die Hand
nehmen. Unter Linux einfach ein mmap einer tmp-Datei machen (quasi den page
cache (den Linux ja beliebig gross macht) als Speicher misbrauchen und die tmp
datei dahinter als swap dafuer "abstellen").
Ein realloc waere dann ein munmap(), ftruncate(fd, old_length + increment),
mmap(). Und dabei muss man noch aufpassen, so grosse Bereiche koennen an Grenzen
stossen wie der Addressraum aufgeteilt ist.

Viele Grüße

Ole



Gruss
Jan

Apotheker halten sich zu jedem arbitràren jedoch festen Zeitpunkt mit je
ca. 30% Wahrscheinlichkeit im Bett, irgendwo oder eben in Apotheken auf.

Ähnliche fragen