En essayant de répondre à another question, j'ai proposé une solution qui utilise std::memcpy()
pour stocker des types génériques dans un tampon de char
s.Anciennes données plaines et problèmes d'alignement `std :: memcpy`
Mon doute est sur les problèmes d'alignement de mémoire possibles stockant POD (je sais que avec le type non-POD, comme std::string
, est très très dangereux).
En résumé: le programme suivant rencontre-t-il des problèmes d'alignement mémoire? Et s'ils le sont, il est possible d'écrire quelque chose de similaire (qui stockent les valeurs POD dans un tampon char
) qui est sûr? Et comment?
#include <cstring>
#include <iostream>
int main()
{
char buffer[100];
double d1 { 1.2 };
std::memmove(buffer + 1, & d1, sizeof(double));
double d2;
std::memmove(& d2, buffer + 1, sizeof(double));
std::cout << d2 << std::endl;
return 0;
}
Cela devrait fonctionner. En général, vérifiez sizeof() moins que le tampon fixe, mais bien sûr, un double est beaucoup moins que le 100 utilisé ici. – Gregg
@Gregg - Bien sûr; J'ai utilisé '100' pour éviter les doutes sur la taille du tampon. – max66