Ist es möglich, Speicher teilweise freizugeben?

7

In C (oder C ++) frage ich mich, ob es möglich ist, einen Speicherblock teilweise freizugeben.

Angenommen, wir erstellen ein Array mit Ganzzahlen a der Größe 100,

%Vor%

und später wollen wir die Größe von a so ändern, dass sie 20 anstatt 100 enthält.

Gibt es eine Möglichkeit, nur die letzten 80 * sizeof (int) Bytes von a freizugeben? Zum Beispiel, wenn wir realloc aufrufen, wird es das automatisch tun?

  • Ich suche nach einer Lösung, die das Verschieben / Kopieren der ersten 20 Zeichen nicht erfordert.
  • Kann man alternativ erklären, warum es schlecht wäre, wenn dies möglich wäre, oder warum die Fähigkeit, dies zu tun, in keiner der beiden Sprachen enthalten ist?
Cam 15.12.2010, 07:04
quelle

3 Antworten

14

Sie können realloc verwenden, aber Sie sollten auf jeden Fall die Verwendung von STL-Containern in Erwägung ziehen, anstatt Speicher manuell zuzuweisen .

    
On Freund 15.12.2010, 07:07
quelle
3

Wir bevorzugen RAII-Container mit rohen Zeigern in C ++.

%Vor%     
fredoverflow 15.12.2010 07:08
quelle
2

Ich würde lieber ein std::vector verwenden. Aktivieren wir C ++ 0x:

%Vor%

Ab n3092 (nicht der endgültige Entwurf, ich brauche eine neue Kopie auf diesem PC):

void shrink_to_fit();

Hinweise: shrink_to_fit ist eine nicht bindende Anforderung, um die Speicherbelegung zu reduzieren. [Hinweis: Die Anfrage ist nicht bindend, um den Spielraum für implementierungsspezifische Optimierungen zu ermöglichen. -Hinweis]

    
Matthieu M. 15.12.2010 08:42
quelle

Tags und Links