Domanda

Sto utilizzando una libreria di manipolazione delle immagini che genera un'eccezione quando tento di caricare le immagini> 4 GB di dimensione. Essa sostiene di essere a 64 bit, ma non sarebbe una libreria a 64 bit permettono il carico immagini più grande di quello? Penso che ricompilati loro librerie C con un modello di memoria / compilatore a 64 bit, ma ancora utilizzati numeri interi senza segno e l'aggiornamento non è riuscito a utilizzare 64 tipi bit.

È una conclusione ragionevole?

Modifica - Come un dopo-pensiero può memoria OS diventare così fragemented che lo stanziamento di grandi pezzi non è più possibile? (Non funziona subito dopo un riavvio o, ma chiedo solo.) Che dire in .NET? Può il .NET gestito memoria diventato così frammentata che lo stanziamento di grandi pezzi fallisce?

È stato utile?

Soluzione

E 'un suggerimento ragionevole, tuttavia l'esatta causa potrebbe essere un certo numero di cose - ad esempio quale sistema operativo sono in esecuzione, quanta RAM / swap avete? L'applicazione / sistema operativo non può over-commit memoria virtuale quindi avrai bisogno di 4 GB (o più) di RAM libera per aprire l'immagine.

Fuori di interesse Non ti sembra di essere una tappa precisa al confine 4GB - cioè vuol un'immagine 3.99GB avere successo, ma un 4GB uno fail - si dice che fa che suggerirebbe un uso definito di una dimensione a 32 bit nelle biblioteche strutture di dati.

Aggiorna

Per quanto riguarda la seconda domanda - Non proprio. Praticamente tutti i moderni sistemi operativi utilizzano la memoria virtuale, in modo che ogni processo ottiene un proprio spazio di indirizzi contigui. Una singola regione contigua nello spazio di indirizzamento a processi non ha bisogno di essere sostenuta da contigue RAM fisica, può essere costituito da un certo numero di aree fisiche separate di RAM fatta a guardare come sono contigui; in modo che il sistema operativo non ha bisogno di avere un unico pezzo 4GB di RAM libera per dare l'applicazione di un pezzo da 4 GB.

E 'possibile che la domanda potrebbe frammentare è spazio di indirizzi virtuali in modo tale che non ci sia spazio per una regione 4GB contigua, ma considerando le dimensioni di uno spazio di indirizzamento a 64 bit è probabilmente altamente improbabile nel vostro scenario.

Altri suggerimenti

Sì, se non forse il formato di file binario si limita la dimensione delle immagini.

Per rispondere alla tua follow-up, di recente ho letto questo articolo e l'ho trovato interessante.

E sì, .NET possono avere problemi con frammentazione della memoria .

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