Question

Quelles sont les limites de la taille d'un fichier mappé en mémoire? Je sais que ce ne peut pas être plus grand que le plus grand morceau continu de l'espace d'adressage non alloué, et qu'il devrait y avoir suffisamment d'espace libre sur le disque. Mais y at-il d'autres limites?

Était-ce utile?

La solution

Tu es trop prudent: Un fichier mappé en mémoire peut être plus grande que l'espace d'adressage. vue du fichier mappé en mémoire est limitée par des contraintes de mémoire OS, mais qui est seulement la partie du fichier que vous regardez à un moment donné. (Et je suppose que vous pourriez techniquement mapper plusieurs vues de parties discontinues du fichier à la fois, à part des frais généraux et des contraintes de longueur de page, il est seulement le nombre total d'octets que vous cherchez à cette pose une limite. Vous pouvez regarder octets [0 à 1024] et les octets [2 40 2 40 + 1024] avec deux points de vue distincts.)

Dans MS Windows, regardez la MapViewOfFile . Il faut effectivement un fichier de 64 bits de décalage et une longueur de 32 bits.

Autres conseils

Cela a été mon expérience lors de l'utilisation des fichiers mappés en mémoire sous Win32:

Si votre carte le fichier entier dans un segment, il puise normalement à environ 750 Mo, car il ne peut pas trouver un plus grand bloc contigu de mémoire. Si vous le diviser en petits segments, disons 100 Mo chacun, vous pouvez vous déplacer en fonction 1800MB-1500 Mo de quoi d'autre est en cours d'exécution.

Si vous utilisez le / 3g switch vous pouvez obtenir plus de 2 Go jusqu'à environ 2700MB mais les performances du système d'exploitation est pénalisé.

Je ne suis pas sûr de 64 bits, je ne l'ai jamais essayé, mais je suppose que la taille maximale de fichier est alors limitée que par la quantité de mémoire physique que vous avez.

Il devrait y avoir d'autres limites. Ne sont pas ceux qui sont assez? ; -)

Sous Windows: «La taille d'une vue de fichier est limité au plus grand bloc contigu de mémoire disponible virtuelle sans réserves Ceci est au plus 2 Go moins la mémoire virtuelle déjà réservée par le processus. »

De MDSN .

Je ne suis pas sûr de LINUX / OSX / Quelle que soit d'autre, mais il est probablement aussi lié à l'espace d'adressage.

FUSE sur Linux, vous pouvez aussi faire un système de fichiers en mémoire qui étend sur le disque sur demande. Je ne sais pas qui se qualifie comme mémoire mappée, et la distinction floue de type obtient.

Oui, il y a des limites aux fichiers mappés en mémoire. La plupart scandaleusement est:

  

Les fichiers mappés en mémoire ne peuvent pas être plus de 2 Go sur les systèmes 32 bits.

     

Lorsqu'un memmap provoque un fichier à créer ou étendue au-delà de sa taille actuelle dans le système de fichiers, le contenu de la nouvelle partie ne sont pas spécifiés. Sur les systèmes avec la sémantique du système de fichiers POSIX, la partie étendue sera est rempli de zéros.

Même sur mon 64 bits, 32 Go de RAM système, je reçois l'erreur suivante si j'essaie de lire dans un grand fichier mappé en mémoire numpy au lieu de prendre des portions de celui-ci en utilisant un octet décalages:

Overflow Error: memory mapped size must be positive

Big ensembles de données sont vraiment une douleur à travailler avec.

entrée de Wikipedia sur le sujet: http://en.wikipedia.org/wiki/Memory-mapped_file

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