Question

Est-il possible de lire directement un fichier binaire en RAM?

Ce que je veux dire est, est-il un moyen de dire au compilateur, voici le fichier, voici le bloc de RAM, s'il vous plaît mettre le contenu du fichier dans la mémoire vive, vous voilà parti rapidement que vous pouvez s'il vous plaît.

Actuellement, je suis pas à pas dans le fichier avec le chargement ifstream dans la RAM (un tableau) de bloc de 64 bits par bloc 64 bits. Mais je pense que cela doit ralentir car il est comme (vient ici une analogie) en utilisant un doigt de gant pour renflouer l'eau dans une tasse (le fichier) dans un pot (la RAM) plutôt que de simplement ramasser la coupe et basculer le contenu dans le pot en une seule fois.

En tant que nouveau venu par rapport à ce que je peux avoir tout à fait la mauvaise idée à ce sujet -. Tout guidence serait d'une grande aide

Je suis juste après la façon la plus rapide d'obtenir un gros fichier dans la RAM.

Merci

Était-ce utile?

La solution

Qu'est-ce que vous empêche de lire le fichier en une seule passe? Est-il trop grand pour la mémoire?

Vous pouvez également utiliser le fichier mappé, UNIX: mmap, Windows: CreateFileMapping

Autres conseils

Je pense que ce dont vous avez besoin est fichier mappé en mémoire , mais l'API dépend OS que vous êtes, sous UNIX, je crois qu'il est mmap ().

mmap devrait travailler pour vous. La plupart des implémentations ne lisent pas réellement le fichier jusqu'à ce que vous faites référence à des pages de mémoire réelle, mais en tout cas vous pouvez accéder au contenu du fichier comme si elle était dans la RAM tout le temps.

Vous ne dites pas quelle plate-forme que vous êtes, mais cela sonne comme un travail pour les fichiers mappés en mémoire.

Votre programme est donné à la mémoire virtuelle - une partie de celui-ci est mis en correspondance avec la RAM, certains sur le fichier d'échange et vous ne pouvez pas faire grand-chose à ce sujet. Cependant, vous pouvez réduire les frais généraux d'utiliser l'interface de système de fichiers en copiant simplement plus gros blocs -. Plusieurs méga-octets par exemple

Je ne sais pas si c'est ce que vous demandez, mais d'accélérer la lecture d'un fichier que vous pouvez tamponner plusieurs octets. le second argument de la méthode de lecture () de fstream peut être réglé pour spécifier la taille d'entrée. en lui donnant, par exemple, un 32k (32 * (2 ^ 10)) valeur pourrait accélérer le processus de lecture. Je vous suggère de faire une analyse comparative avec différentes tailles de mémoire tampon.

Si vous voulez dire « éviter de mettre le fichier sur swap et mettre toujours en RAM » Je pense que vous pouvez, car cela est quelque chose que le système d'exploitation prend en charge.

Regardez l'exemple ContentStreaming dans le DirectX SDK.

Il utilise l'approche de mappage de fichier. De toute évidence, son utilise l'API Windows, mais vous pouvez trouver l'API correspondante pour d'autres plateformes.

La chose intéressante est qu'il vous montre l'approche dans le contexte. (Lecture en / radiomessagerie dans certaines parties d'un modèle énorme (dans ce terrain de cas) sur demande

Boost fournit un support multi-plateforme pour les fichiers mappés en mémoire, entre autres ...

Boost fichiers de mémoire mappées

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