OVH Cloud OVH Cloud

Buffer alignée

12 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,

petit question: comment écririez-vous une fonction testant si un pointer
est aligné sur 16 octets ?

Merci !

2 réponses

1 2
Avatar
Mathias Gaunard

size_t n'est pas forcement assez grand pour contenir la valeur d'un
pointeur


Mais size_t est assez grand pour contenir la taille de n'importe quel objet.
Et l'alignment est forcement plus petit ou égal à la taille maximale
d'un objet.

Avatar
James Kanze
Mathias Gaunard wrote:

size_t n'est pas forcement assez grand pour contenir la valeur d'un
pointeur


Mais size_t est assez grand pour contenir la taille de n'importe quel obj et.
Et l'alignment est forcement plus petit ou égal à la taille maximale
d'un objet.


Oui, mais selon la norme : « A pointer can be explicitly
converted to any integral type large enough to hold it. ». En
C++, une telle conversion doit être détectée par le
compilateur ; en C, c'est un comportement indéfini.

Je me démande pourquoi la différence. Dans ce cas-ci, le but du
comportement indéfini en C, c'est clairement de permettre à
l'implémentation de le définir d'une façon utile pour cette
implémentation. Historiquement, des compilateurs C l'ont
accepté, et actuellement, gcc n'en génère qu'un avertissement,
et Sun cc l'accepte sans rien dire (tandis que les deux
compilateurs le rejettent en C++, au moins avec leurs options
par défaut).

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2