🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15569

Re: alignements struct/tableaux

#15569
From: Antoine Leca
Date: Mon, 19 Sep 2005 12:37
64 lines
4314 bytes
En <news:432c91b5$0$21740$626a14ce@news.free.fr>,
Pierre Habouzit va escriure:
> Sinon *juste pour ma culture personnelle* -- je ne compte
> certainement pas l'utiliser si la norme l'interdit

La norme n'interdit rien. Elle ne fait que d�crire un cadre restreint, jug�
consensuel par la communaut� (ce dernier fait n'est pas propre � la norme,
mais au fait qu'elle est utilis�e), dans lequel le comportement est d�fini.
Rien ne doit t'emp�cher de baguenauder en dehors de ce cadre.

> ou ne le sp�cifie
> pas -- y a-t-il vraiment *beaucoup* de compilateurs/architectures o�
> une struct avec deux pointeurs sur le m�me type, ne sont pas align�s
> pareil que un tableau avec deux de ces pointeurs ?

Non, en fait il est difficile d'imaginer un tel cas (o� cela ne marche pas).


> (sans doute les archis o� les pointeurs ont moins de bits que
> l'entier le plus grand manipulable par le processeur. mais je doute
> que de telles archis soient l�gion ...)

M�me dans ce cas-l�, tu vas avoir du mal � ne pas satisfaire ta demande,
sauf � inventer un d�lire pas possible sur la manipulation des pointeurs
dans les structures.
Le plus � vraissemblable �, c'est l'inverse, un compilateur qui fait expr�s
de g�cher des octets entre les membres d'une structure (par exemple pour
pi�ger les programmes qui font des hypoth�ses incorrectes sur les
alignements).


> donc reposons la question autrement. si my_type est un type qui
> repr�sente la plus grosse valeur enti�re manipulable par le syst�me
> (c'est pas rigoureux comme d�finition, mais vous comprendrez sans
> doute mon point). est-ce stupide de supposer que :
>
> struct {
>   my_type a;
>   my_type b;
> }
>
> et my_type c[2] vont �tre align�s pareils ?

Ce n'est pas stupide, c'est seulement non portable.
Contre exemple (un peu mais pas beaucoup tir� par les cheveux, et qui
diff�re un peu de ta question, mais je pense que tu sauras extrapoler): au
lieu d'entiers int�ressons-nous aux flottants, dans le cadre connu de
l'architecture x86. Les plus grands flottants du microprocesseur sont les
�tendus de 80 bits. Pour une cible 32 bits, il y a deux alignements
potentiellement utilisables : fronti�re de 16 bits (un �l�ment tient sur 80
bits, sizeof=10), ou fronti�re de 32 bits (un �l�ment tient sur 96 bits,
sizeof=12) (en 64 bits, on a aussi fronti�re de 64 bits, avec encore plus de
g�chis).
Je pr�tend que l'on peut trouver des compilateurs qui vont aligner un
tableau de ces flottants sur la fronti�re de 16 bits (pour �conomiser la
place en m�moire quand il s'agit de manipuler de grandes quantit�s de
donn�es); mais par contre que les membres de structures peuvent �tre align�s
sur fronti�re de 32 bits pour acc�l�rer les traitements sur (a priori) de
petites quantit�s de donn�es. Et gr�ce � l'agr�able propri�t� de
petits-boutients (l'adresse ne change pas quand on change de type), cela
reste conforme. Par contre, ta supposition ci-dessus ne tient plus.


Antoine
Technical Details
Message-ID: <dgmbec$3h4$1@shakotay.alphanet.ch>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!freenix!news.alphanet.ch!alphanet.ch!not-for-mail
References: <432c52d5$0$9425$626a14ce@news.free.fr> <mn.8cb87d59c7031bee.15512@YOURBRAnoos.fr> <432c91b5$0$21740$626a14ce@news.free.fr>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,2ab126dba8e5e645
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!freenix!news.alphanet.ch!alphanet.ch!not-for-mail
From: "Antoine Leca" <root@localhost.invalid>
Newsgroups: fr.comp.lang.c
Subject: Re: alignements struct/tableaux
Date: Mon, 19 Sep 2005 14:37:32 +0200
Organization: Posted through ALPHANET (http://www.alphanet.ch/)
Lines: 65
Sender: antoinel@143.red-217-127-250.pooles.rima-tde.net
Message-ID: <dgmbec$3h4$1@shakotay.alphanet.ch>
References: <432c52d5$0$9425$626a14ce@news.free.fr> <mn.8cb87d59c7031bee.15512@YOURBRAnoos.fr> <432c91b5$0$21740$626a14ce@news.free.fr>
NNTP-Posting-Host: 143.red-217-127-250.pooles.rima-tde.net
Mime-Version: 1.0
Content-Type: text/plain;
 charset="iso-8859-15"
Content-Transfer-Encoding: 8bit
X-Trace: shakotay.alphanet.ch 1127133453 3620 217.127.250.143 (19 Sep 2005 12:37:33 GMT)
X-Complaints-To: usenet@alphanet.ch
NNTP-Posting-Date: Mon, 19 Sep 2005 12:37:33 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1506
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506