J'implémente de grands tableaux constants persistants via mmap. Y a-t-il des trucs et astuces ou des astuces à connaître lors de l'utilisation de mmap?mmaping de gros fichiers (pour les grands tableaux persistants)
Répondre
Tous les pointeurs qui sont stockés à l'intérieur de la région mmap'd doivent être effectués comme des décalages de la base de la région mmap'd, pas comme de vrais pointeurs! Vous n'obtiendrez pas nécessairement la même adresse de base lorsque vous appliquez la région à la prochaine exécution du programme. (J'ai dû nettoyer le code qui a fait des suppositions incorrectes sur la constance de l'adresse de base de la région mmap).
Assurez-vous de vérifier les restrictions sur la taille des fichiers ouverts ou l'utilisation de la mémoire. Sous Linux, il y a une commande shell intégrée ulimit. Exécuter comme ulimit -a
pour voir les paramètres actuels.
Vider écrit dans le tableau en mémoire avec le msync (2) syscall ou ils peuvent rester en mémoire jusqu'à munmap (2) et il peut y avoir une panne de courant ou quelque chose avant!
Si plusieurs processus appliquent la même zone de mémoire partagée avec des droits de lecture et d'écriture, assurez-vous qu'un seul écrit à la fois pour éviter de corrompre vos données. Ou utilisez le verrouillage de fichier ou d'autres moyens de synchronisation.
Ceci est le cas d'utilisation le plus simple pour mmap(), donc il ne devrait pas y avoir beaucoup de choses à vous trébucher.
Vous chargez simplement un grand réseau constant. Étant constantes, vous ne devriez pas avoir à vous soucier de la synchronisation. Il est conseillé de vous assurer que le paramètre prot est défini sur PROT_READ uniquement car vous n'écrivez pas.
Si un ou plusieurs programmes utilisant les constantes doivent être exécutés en continu, il peut être utile d'avoir un programme distinct qui charge les données et les maintient en mémoire. Les exécutions des autres programmes effectuent alors essentiellement une mémoire partagée plutôt que de lire continuellement le fichier en mémoire.
- 1. Publication de gros fichiers
- 2. Types pour les grands nombres
- 3. De grands fichiers PDF dans les e-mails de SAP
- 4. Suggestions pour télécharger de très gros fichiers (> 1GB)
- 5. Emacs travaillant avec de gros fichiers XML
- 6. Computing MD5SUM de gros fichiers en C#
- 7. Fusion de gros fichiers en C#
- 8. télécharger de gros fichiers vidéo sur l'iPhone
- 9. Vous cherchez une classe dans les grands fichiers dbml
- 10. Appel de fichiers de commandes avec make et de rendre les changements persistants
- 11. Quelle est la meilleure stratégie pour gérer les gros téléchargements de fichiers avec Ruby on Rails?
- 12. Recherche de chaînes dans de gros fichiers binaires
- 13. La lecture de très gros fichiers dans PHP
- 14. Utilisateurs persistants utilisant Hibernate
- 15. Quel outil utiliser pour dessiner les grands nuages de points
- 16. Où placer de gros fichiers statiques dans un projet Tomcat?
- 17. iPhone SDK: GameKit et de gros fichiers + connexion perdue
- 18. Traiter de gros fichiers texte rapidement avec VBA
- 19. Gestion des stocks persistants
- 20. Analyse de gros fichiers pseudo-xml en python
- 21. Objets personnalisés persistants
- 22. Diffusion de gros fichiers en amont sur ASP.NET MVC
- 23. Regex pour refactoring aux tableaux
- 24. Syntaxe VB.NET pour les tableaux d'objets
- 25. Quelle classe pour les tableaux multidimensionnels sérialisables?
- 26. indexOf syntaxe pour les tableaux multidimensionnels?
- 27. Comment utiliser CodeVariableDeclaraionStament pour déclarer les tableaux
- 28. Java Generics Syntaxe pour les tableaux
- 29. log4net, la journalisation, quels sont les plus grands avantages
- 30. mise en page du référentiel pour les grands projets Maven
Le rinçage n'est pas nécessaire car les données sont constantes. –