Est-il prudent de supposer sizeof (double)> = sizeof (void *)?

Est-il prudent de supposer que sizeof(double) sera toujours supérieur ou égal à sizeof(void*) ?

Pour mettre cela dans un certain contexte, est le suivant portable?

 int x = 100; double tmp; union { double dbl; void* ptr; } conv; conv.ptr = (void*)&x; tmp = conv.dbl; conv.dbl = tmp; printf("%d\n", *((int*)conv.ptr)); 

Cela fonctionne sur les quelques machines sur lesquelles je l’ai testé, mais je peux voir que cela va terriblement mal si sizeof(void*) > sizeof(double) .

    Sur les systèmes actuels, oui. double correspond à 64 bits sur tous les systèmes actuels et futurs , car ils sont alignés sur la double précision de l’arithmétique IEEE. Il est peu probable, mais certainement possible, que les pointeurs soient plus grands à l’avenir – probablement pas pour augmenter l’espace d’adressage, mais pour transporter des informations contraignantes.

    En tout cas, cela semble être une très mauvaise idée de s’appuyer sur une relation entre double et void *

    La taille n’a rien à voir avec ça. Il y aura toujours des bits stockés et la taille sera toujours suffisamment grande pour contenir un void* . Ce qui ne va pas, c’est que vous interprétez un motif de bits presque aléatoire comme un pointeur. Cela ne peut faire grand chose d’autre qu’un crash, mais vous le saviez probablement déjà. Ne le fais pas.