2013-08-09 4 views
5

Mi sto adoperando per massimizzare la velocità del mio programma (in modo da ottenere risultati in tempo reale) ed evitare il caricamento non necessario dei dati dal disco rigido.Come utilizzare quanta più RAM possibile per il mio programma?

Il programma dovrebbe elaborare una quantità enorme di immagini e mi piacerebbe gestire nella RAM quanti più dati elaborati possibile. Ma ho scoperto che malloc non assegnerà più di 2 GB anche se ho 8 GB di RAM (Windows 7 64-bit).

Come posso fare in modo che il mio programma utilizzi più RAM possibile?

+0

Se si passa a un Linux a 64 bit, si sarà in grado di 'malloc' molto più di 2 GB (probabilmente quasi 7 o 8 GB). –

+3

Ricorda che ad es. 'malloc' alloca un blocco continuo di memoria. Potrebbe semplicemente essere che non esiste un blocco abbastanza grande per te. Inoltre, ricorda che anche se hai 8 GB di RAM fisica, tutte le applicazioni condividono quella memoria e, a meno che tu non legga/scriva continuamente tutta la memoria, alcune parti potrebbero essere scambiate su disco. –

+3

Sei sicuro che il tuo programma sia compilato in modalità a 64 bit in un eseguibile a 64 bit? –

risposta

7

Credo che il finestre equivalente di mmap(2) è VirtualAlloc

Questo dovrebbe consentire di utilizzare molta più memoria. Si prega di tenere presente che il sistema operativo può ancora decidere di escludere la memoria. Puoi bloccarlo nella RAM con VirtualLock. Tuttavia, la quantità di memoria bloccabile potrebbe essere limitata.

Inoltre, come indicato nei commenti, assicurarsi di compilare il programma come 64 bit.

+0

_ "La quantità di memoria bloccabile può essere limitata" _ - sì, e non solo _ può essere_ ma è molto seriamente limitato. L'impostazione predefinita, se non ricordo male, è 16 MiB, a meno che non si modifichi prima la dimensione del working set. – Damon