Question

Je dois faire face à une énorme quantité de données qui ne correspond pas habituellement dans la mémoire principale. La façon dont j'accéder à ces données a lieu élevé, la mise en cache si certaines parties dans les regards de mémoire comme une bonne option. Est-il possible de simplement malloc () un réseau énorme, et que le chiffre du système d'exploitation sur les bits à la page et à quels bits pour garder?

Était-ce utile?

La solution

En supposant que les données proviennent d'un fichier, vous êtes mieux cartographie mémoire de fichiers. Dans le cas contraire, ce que vous finissez par faire alloue votre tableau, puis copier les données de votre fichier dans le tableau - et depuis votre tableau est mis en correspondance avec le fichier de page, vous fondamentalement juste de copier le fichier d'origine dans le fichier de page, et dans le processus polluant le « cache » (mémoire physique) pour que d'autres données qui active a une meilleure chance d'être évincé. Ensuite, lorsque vous vous (en général) écrire le dos de données du tableau dans le fichier d'origine, qui (dans ce cas) correspond à la copie de l'arrière de fichier de page au fichier d'origine.

Mémoire cartographie du fichier au lieu que créer un espace d'adresses et les cartes directement au fichier d'origine à la place. Cela permet d'éviter la copie des données à partir du fichier d'origine au fichier de la page (et à nouveau lorsque vous avez terminé), ainsi que le déplacement des données temporairement dans la mémoire physique sur le chemin du fichier d'origine dans le fichier de page. La plus grande victoire, bien sûr, est quand / s'il y a des morceaux importants du fichier original que vous ne vraiment utiliser du tout (dans ce cas, ils ne peuvent jamais être lus dans la mémoire physique du tout, en supposant que le morceau utilisé est au moins une page en taille).

Autres conseils

Si les données sont dans un grand fichier, regardez en utilisant mmap pour le lire. Les ordinateurs modernes ont tellement de RAM, vous ne pourriez pas assez d'espace d'échange disponible.

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