quel est le nombre d'octets suggéré à chaque fois pour les fichiers trop volumineux pour pouvoir être mappés en mémoire en même temps?

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

  •  06-07-2019
  •  | 
  •  

Question

J'ouvre des fichiers en utilisant une carte mémoire. Les fichiers sont apparemment trop volumineux (6 Go sur un PC 32 bits) pour pouvoir être mappés dans un fichier auparavant. Je pense donc à en mapper une partie à chaque fois et à ajuster les décalages lors de la prochaine cartographie.

Existe-t-il un nombre optimal d'octets pour chaque mappage ou existe-t-il un moyen de déterminer un tel chiffre?

Merci.

Était-ce utile?

La solution

Il n'y a pas de taille optimale. Avec un processus 32 bits, il n'y a que 4 Go d'espace d'adressage total, et en général, seuls 2 Go sont disponibles pour les processus en mode utilisateur. Ces 2 Go sont ensuite fragmentés par le code et les données des fichiers exe et DLL, des allocations de tas, des piles de threads, etc. Compte tenu de cela, vous ne trouverez probablement pas plus de 1 Go d'espace contigu pour mapper un fichier en mémoire.

Le nombre optimal dépend de votre application, mais je serais préoccupé par le mappage de plus de 512 Mo dans un processus 32 bits. Même en vous limitant à 512 Mo, vous pouvez rencontrer des problèmes en fonction de votre application. Si vous pouvez utiliser la technologie 64 bits, vous ne rencontrerez aucun problème de mappage de plusieurs gigaoctets d'un fichier dans la mémoire. Votre espace d'adressage est si grand que cela ne devrait poser aucun problème.

Vous pouvez utiliser une API telle que VirtualQuery pour rechercher le plus grand espace contigus, mais vous pouvez également provoquer des erreurs de mémoire lorsque vous supprimez de grandes quantités d'espace d'adressage.

EDIT: Je viens de me rendre compte que ma réponse est spécifique à Windows, mais vous ne savez pas de quelle plate-forme vous parlez. Je suppose que les autres plates-formes ont des facteurs limitants similaires pour les fichiers mappés en mémoire.

Autres conseils

Le fichier doit-il être mappé en mémoire?

J'ai édité des fichiers vidéo de 8 Go sur un PIII 733 MHz (ce qui n'est pas agréable, mais c'est faisable).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top