J'essaie de savoir comment remapper les fichiers mappés en mémoire sur un Mac (quand je veux étendre l'espace disponible).Y a-t-il vraiment pas de plan à Darwin?
Je vois nos amis dans le monde Linux ont mremap
mais je ne trouve pas une telle fonction dans les en-têtes sur mon Mac. /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h
a ce qui suit:
mmap
mprotect
msync
munlock
munmap
- mais pas
mremap
man mremap
confirme mes craintes.
Je suis actuellement à munmap
et mmmap
si je veux redimensionner la taille du fichier mappé, ce qui implique d'invalider toutes les pages chargées. Il doit y avoir un meilleur moyen. Sûrement? J'essaye d'écrire du code qui fonctionnera sur Mac OS X et Linux. Je pourrais me contenter d'une macro pour utiliser la meilleure fonction dans chaque cas si j'avais avait à mais je préfère le faire correctement.
Donc vous suggérez que je devrais allouer pour la plus grande taille possible que je pourrais jamais vouloir et remplir le trou? C'est une idée intéressante mais soit je cartographie le maximum d'adresses possible et je ne laisse plus d'adresses pour rien d'autre, soit j'en utilise un peu moins et je risque de manquer. De plus, cela ne serait pas multiplate-forme (comme indiqué dans ma question) car je ne pouvais pas garantir que certains systèmes de fichiers ne feraient pas disparaître toute la plage du fichier et gaspilleraient des gigaoctets. – Joe
Vous n'avez même pas besoin de faire le fichier sur un disque de cette taille. Juste 'mmap' plus grand que la taille du fichier. Les accès au-delà de la fin du fichier se traduiront par 'SIGBUS', donc vous devrez le 'ftruncate' plus longtemps avant d'essayer d'accéder à de nouvelles parties via le' mmap', mais sinon c'est bon. –