Je crée un fichier contenant des objets de données. objet de données ont différentes tailles et sont quelque chose comme ça (très simplifié):Ecriture de données alignées dans un fichier binaire
struct Data{
uint64_t size;
char blob[MAX_SIZE];
// ... methods here:
}
À un stade ultérieur, le fichier sera mmap() en mémoire, donc je veux le début de tous les objets de données démarre sur adresse de mémoire alignée par 8 octets où uint64_t size
seront stockés (ignorons l'endianness).
ressemble plus ou moins à ce (actuellement 8 octets) codées en dur:
size_t calcAlign(size_t const value, size_t const align_size){
return align_size - value % align_size;
}
template<class ITERATOR>
void process(std::ofstream &file_data, ITERATOR begin, ITERATOR end){
for(auto it = begin; it != end; ++it){
const auto &data = *it;
size_t bytesWriten = data.writeToFile(file_data);
size_t const alignToBeAdded = calcAlign(bytesWriten, 8);
if (alignToBeAdded != 8){
uint64_t const placeholder = 0;
file_data.write((const char *) & placeholder, (std::streamsize) alignToBeAdded);
}
}
}
Est-ce la meilleure façon d'obtenir un alignement dans un fichier?
Que voulez-vous dire par « l'alignement »? Pour écrire à une position spécifique dans le fichier? Avez-vous essayé de *** chercher *** dans le fichier au poste recherché? –
Je vais modifier la question – Nick
Donc, vous voulez que toutes les données soient au format 8 octets (64 bits). Est-ce exact? – Shirkam