ritorna realloc NULL dopo un certo tempo, mentre l'allocazione di piccole dimensioni (<500Kb) blocco di dati; non c'è abbastanza memoria

StackOverflow https://stackoverflow.com/questions/2715200

Domanda

Hi!

La breve domanda è: che cosa può essere il problema?

L'utilizzo della memoria complessiva del mio programma (indicato dalla task manager) è quasi la stessa per tutto il tempo (nei pressi di 40 minuti) è in esecuzione, e non ho vicino 2G di memoria più libera.

In esecuzione su win2003r2.

L'allocazione di memoria / liberazione è abbastanza alto - ho bisogno di interagire con altri software, la preparazione dei dati per esso ed eliminarlo, quando è superata. Numero di blocchi di dati non è costante.

Grazie!

È stato utile?

Soluzione

In genere ci sono solo 2 motivi realloc fallirà

  1. Non abbastanza contiguo memoria satsify richiesta
  2. la corruzione di memoria

Anche se c'è abbastanza memoria complessiva nel programma per soddisfare la richiesta potrebbe non essere sufficiente memoria contigua a farlo a causa della frammentazione. Il modo migliore per determinare questo è quello di utilizzare uno strumento in grado di riferire sui blocchi contigui per determinare se uno è disponibile per soddisfare la vostra richiesta. Credo che uno degli strumenti nelle Sysinternals pacchetto non così.

Altri suggerimenti

Con nessun codice da guardare, tutto quello che posso darvi è una soluzione.

Prova di memoria reallocing solo quando ne avete bisogno di crescere, e il doppio in dimensioni, invece di semplicemente aggiungendo tuttavia molti byte necessari. Questo aiuta enormemente con la frammentazione. Dal momento che ha detto di avere memoria sufficiente, non ti preoccupare di liberandola quando hai finito, solo lì tenerlo se è abbastanza ragionevole.

Rendere il vostro obiettivo di ridurre la frammentazione a tutti i costi, mantenendo un set di lavoro 200MB sembra perfettamente bene a me per la potenza di calcolo di oggi. Se si va 500MB passato spesso e il programma è stato eseguito per lunghi periodi di tempo, è possibile iniziare a guardare in ottimizzando ulteriormente il set di lavoro, ma fino ad allora non ti preoccupare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top