Qu'est-ce qui limite la taille d'un fichier mappé en mémoire? Je sais qu'il ne peut pas être plus grand que le plus gros morceau continu d'espace d'adressage non alloué, et qu'il devrait y avoir assez d'espace disque libre. Mais y a-t-il d'autres limites?Quelle est la taille maximale d'un fichier mappé en mémoire?
Répondre
Vous êtes trop conservateur: un fichier mappé en mémoire peut être plus grand que l'espace d'adressage. Le afficher du fichier mappé en mémoire est limité par les contraintes de mémoire du système d'exploitation, mais c'est seulement la partie du fichier que vous regardez en même temps. (Et techniquement, vous pouvez mapper plusieurs vues de parties discontinues du fichier à la fois, donc en dehors des contraintes de surcharge et de longueur de page, c'est seulement le nombre total d'octets que vous regardez qui pose une limite. [0 à 1024] et [2 octets à 2 + 1024] avec deux vues séparées.)
Dans MS Windows, regardez la fonction MapViewOfFile. Il prend effectivement un décalage de fichier de 64 bits et une longueur de 32 bits.
Oui, j'aurais dû dire "voir". J'ai besoin d'avoir accès à tout le fichier en une fois, sans re-mmapp() ing. – user88185
MapViewOfFile prend une longueur de 64 bits sur une machine 64 bits – springy76
une toute façon on peut passer à zéro pour une taille qui signifie « aussi grand que le fichier est » –
Il ne devrait pas y avoir d'autres limites. Ne sont-ils pas assez? ;-)
Sur un système d'exploitation 64 bits ces limites semblent assez laxistes ... – user88185
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.
juste pour clarifier, c'est la taille d'une vue de fichier, pas la taille du fichier lui-même. –
"2 Go moins la mémoire virtuelle déjà réservée par le processus" est sur la machine 32 bits? Est-ce différent sur une boîte de 64 bits? – user88185
Avec FUSE sur Linux, vous pouvez aussi faire un système de fichiers en mémoire qui étend sur le disque sur demande. Je ne suis pas sûr que cela se qualifie comme mémoire mappée, et la distinction devient un peu floue.
entrée de Wikipedia sur le sujet: http://en.wikipedia.org/wiki/Memory-mapped_file
Je ne vois pas d'autres limites mentionnées dans cet article de Wikipedia, est-ce que cela signifie que il n'y en a pas? – user88185
Alors que cela peut théoriquement répondre à la question, [il serait préférable] (http: //meta.stackoverflow.com/q/8259) pour inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. –
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 autour de 750 Mo, car il ne peut pas trouver un plus grand bloc de mémoire contigu. Si vous le divisez en segments plus petits, disons 100 Mo chacun, vous pouvez obtenir environ 1500 Mo-1800 Mo en fonction de ce qui 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 présume la taille du fichier max est alors limitée que par la quantité de mémoire physique que vous avez.
Sur 64 bits, la limite est l'espace d'adressage disponible, identique à celui de 32 bits. Vous pouvez mapper une vue 1 Go sur une machine 32 bits qui a seulement 32 Mo de mémoire physique. De la même manière, vous pouvez mapper une vue de 10 To sur une machine 32 bits qui ne dispose que de 0,5 Go de mémoire. Seules les pages de 4 Ko que vous avez vraiment accès sont mappées dans la mémoire réelle. – springy76
@ springy76: vous ne pouvez pas mapper une vue de 10 To sur une machine 32 bits. Seulement sur 64 bits. –
@SergeyK. tu as raison, c'est aussi ce que je voulais écrire - mais mes doigts ont tapé autre chose. Il aurait dû lire "De la même façon que vous pouvez mapper une vue de 10 To sur une machine 64 bits qui a seulement 0,5 Go de mémoire" – springy76
- 1. Quelle est la taille maximale d'un int en PHP?
- 2. Fichier Mappé Mémoire C# - Bitmap
- 3. Quelle est la taille maximale de la table SQL
- 4. Quelle est la taille maximale des arbres d'expression LINQ?
- 5. Quelle est la taille maximale de maxReceivedMessageSize pour un NetNamedPipeBinding?
- 6. Quelle est la taille maximale raisonnable qu'une application multiplateforme devrait permettre à un fichier texte d'obtenir?
- 7. struts2 fileupload taille de fichier maximale
- 8. Adobe flex taille maximale du fichier téléchargé
- 9. Recherche binaire dans un fichier trié (mappé en mémoire?) En Java
- 10. Quelle est la taille maximale d'une base de données MySQL dans la version 5 et supérieure?
- 11. Comment obtenir la taille de fichier maximale autorisée dans .Net?
- 12. Quelle est l'empreinte mémoire maximale en Mo pour une application iPhone typique?
- 13. Taille maximale des files d'attente d'acteur?
- 14. SignByCert et la taille maximale du signe
- 15. Quelle est la taille de User.Identity.Name?
- 16. Quelle est la taille de System.Threading.Timer?
- 17. Quelle est la taille d'une énumération en C?
- 18. Taille maximale des baies .NET
- 19. Taille de fichier maximale de LogFileAppender dans Log4Net
- 20. Mémoire maximale qu'un processus .NET peut allouer
- 21. SQL Server "mémoire maximale du serveur" - semble avoir aucun effet sur la taille virtuelle
- 22. Quelle est la longueur maximale d'un SID au format SDDL
- 23. Quelle est la valeur entière maximale dans Flex?
- 24. Quelle est la taille de segment de mémoire par défaut pour le J9VM d'IBM?
- 25. Quelle est la taille maximale que je peux fournir avec la clause de cache dans les séquences Oracle?
- 26. Valeur maximale en fonction de la taille de la longueur et de la longueur en .NET
- 27. Quelle est la manière la plus appropriée d'utiliser MemoryMappedViewAccessors de .Net 4.0?
- 28. Quelle est la taille maximale des données JSON pouvant être chargée par Dojo ComboBox/Filtering Select Component?
- 29. taille de l'application .net en mémoire
- 30. Taille de transaction maximale dans PostgreSQL
Plate-forme? Windows ou Linux? –