qual è il numero di byte suggerito ogni volta per i file troppo grandi per essere mappati in memoria contemporaneamente?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Sto aprendo i file usando la mappa di memoria. I file sono apparentemente troppo grandi (6 GB su un PC a 32 bit) per essere mappati in uno fa. Quindi sto pensando di mappare una parte ogni volta e di regolare gli offset nella prossima mappatura.

Esiste un numero ottimale di byte per ciascuna mappatura o esiste un modo per determinare tale cifra?

Grazie.

È stato utile?

Soluzione

Non esiste una dimensione ottimale. Con un processo a 32 bit, sono disponibili solo 4 GB di spazio totale di indirizzi e in genere sono disponibili solo 2 GB per i processi in modalità utente. Questi 2 GB vengono quindi frammentati da codice e dati da exe e DLL, allocazioni di heap, stack di thread e così via. Detto questo, probabilmente non troverai più di 1 GB di spazio contiguo per mappare un file in memoria.

Il numero ottimale dipende dalla tua app, ma sarei preoccupato di mappare più di 512 MB in un processo a 32 bit. Anche limitandoti a 512 MB, potresti riscontrare alcuni problemi a seconda della tua applicazione. In alternativa, se riesci a passare a 64 bit, non dovrebbero esserci problemi a mappare più gigabyte di un file in memoria: lo spazio di indirizzamento è così grande che non dovrebbe causare problemi.

È possibile utilizzare un'API come VirtualQuery per trovare lo spazio contiguo più grande, ma in questo caso si verificano errori di memoria insufficiente quando si rimuovono grandi quantità di spazio degli indirizzi.

MODIFICA: ho appena realizzato che la mia risposta è specifica per Windows, ma non hai individuato la piattaforma di cui stai discutendo. Presumo che altre piattaforme abbiano simili fattori limitanti per i file mappati in memoria.

Altri suggerimenti

Il file deve essere mappato in memoria?

Ho modificato file video da 8 GB su un PIII da 733 MHz (non piacevole, ma fattibile).

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