Je travaille dans Windows natif. Cela dit, je suis à la recherche d'écrire une fonction dont le prototype est quelque chose comme:
void getData(uint8_t* p, std::string const& fn, size_t off,
size_t s, boost::function<void()> const& F);
J'ai un morceau de mémoire, préalloué sur le tas (avec nouveau). J'ai un fichier sur le disque. Je voudrais spécifier un pointeur dans mon morceau de mémoire ("p"), un nom de fichier ("fn") et un offset dedans ("off"), une taille ("s") et un rappel ("F") . Je voudrais que le sous-programme appelle finalement "F" quand ma mémoire "p" a été remplie avec "s" octets du fichier "fn" au décalage "off". Je vais garantir que "p", "s" et "off" sont alignés sur une puissance prédéfinie de 2, mais je ne voudrais pas que des copies puissent être évitées. Idéalement, il serait DMA les données du disque à mon emplacement directement.
J'ai examiné le mappage de la mémoire du fichier, mais cela nécessiterait de copier les données de la zone mappée dans mon "p". N'y a-t-il pas une façon plus rapide de le faire?
balise 'c' retirée – pmg
J'utiliserais de meilleurs noms de paramètres que p, fn, s et F! – JLWarlow
Hmm ... tout le but des fichiers mappés en mémoire est justement de ne rien copier, mais plutôt de * map *. Peut-être devriez-vous approfondir cette question. C'est une fonctionnalité très puissante de Windows, disponible dès la toute première version de Windows NT. –