GodzilLe 05/11/2017 à 17:21
A vrai dire il vaux mieux, si on map un fichier en mémoire, utiliser une structuré avec un pack a 1 et pointer la structure sur la zone mémoire.
Et si c'est portable, c'est justement tout l'intérêt du compilateur, quand on passe par ce genre de méthode, plutôt que de jouer avec des pointeurs direct. Le compilateur va faire attention a ce que le code ne fasse pas d'acces non alligné si on est sur une archi qui ne peux pas lire des données non allignée.
Apres pour un probleme de performances c'est un autre sujet, mais si le fichier met des valeurs a des addresses non alignée, tu n'a pas forcement le choix.
A vrai dire, faire une fonction qui va swaper les octets n'est pas forcement des plus pratique, l'avantage d'un fichier mappé en mémoire c'est qu'on peux y acceder en direct, sinon autant lire a coup de (f)read avec la taille dont on a besoin..
Folco: d'ailleurs, a moins d'utiliser Windows (et encore il y a moyen de faire) je te conseilllerais plutot de passer par du mmap, plutot qu'un truc genre
char *buf = malloc(size_of_file)
fread(buf, 1, size_of_file, file);
mmap, contrairement a cette facon de faire te permet de ne pas avoir a gerer la mémoire car c'est l'OS qui gere le mapping mémoire du dit fichier, donc il est capable si besoin est de décharger une partie du fichier de la mémoire, et ensuite recharger.
Tres utile si tu as de tres gros fichiers a mettre en memoire (comme des fichiers qui sont plus gros que l'espace memoire disponible)