OVH Cloud OVH Cloud

Contiguité des structures

15 réponses
Avatar
svinot
Bonjour,

Je suis en train de mettre à jour un programme qui utilise des
structures contenant plusieurs tableaux de char. Il utilise par la
suite ces tableaux "comme s'ils se suivaient". C'est à dire comme si
le dernier caractère de premier tableau est immédiatement suivi en
mémoire par le premier caractère du second tableau.

Esce toujours vérifié ou non ? Sur mon IBM (unix) il semble que cela
soit correct mais je m'intérroge. Merci si vous avez des contres
exemples,

Sébastien

5 réponses

1 2
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Sebastien" wrote:

J'ai fait tourné ton prog et j'obtiens effectivement aussi 3. Je me demande
donc si on peut "raisonnablement" supposer que c'est toujours le cas
(lorsque la structure ne contient que des tableaux de char).


Si on cherche la portabilité totale, il ne faut pas compter dessus. Si on se
contente d'un fonctionnement sur un nombre connu et limité de plateformes
pour lesquelles on devra vérifier le fonctionnement au moins une fois, c'est
acceptable.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Erwan David
Emmanuel Delahaye écrivait :

Non. L'ordre des éléments est garanti dans une structure, mais 'en vrac', le
compilateur/linker fait ce qu'il veut. J'ai connu des linkers qui plaçaient
les gros objets d'abord, pour pouvoir glisser les plus petits dans les
interstices.


On peut aussi avoir des stratégies d'allocations qui auront des zones
différentes selon la taille des objets pour éviter la fragmentation
mémoire.


--
Monde de merde

Avatar
Antoine Leca
Emmanuel Delahaye écrivit:
In 'fr.comp.lang.c', "Antoine Leca" wrote:

Je suis en train de mettre à jour un programme qui utilise des
structures contenant plusieurs tableaux de char. Il utilise par la
suite ces tableaux "comme s'ils se suivaient".



Si tu veux que cela marche, oublie les structures
[couic]



Non.


Non quoi ? Ou non qui ?

L'ordre des éléments est garanti dans une structure, mais 'en
vrac', le compilateur/linker fait ce qu'il veut.


Donc... oublier les structures.


Antoine




Avatar
Antoine Leca
Stephane Legras-Decussy écrivit:
Si tu veux que cela marche, oublie les structures, et alloue
les tableaux (de caractères, pas d'autre chose) les uns à la
suite des autres.
Ça, c'est garanti OK en C.



ah bon ?

tu as le passage de la norme qui dit ça ?


Oui, tout plein. 6.2.6.1p4 (propriétés de unsigned char[n]).
Ou 6.5.6p8 (les tableaux n'ont pas de trous).

En me relisant, je m'aperçois qu'il y a une finesse qui vous a
peut-être induit en erreur: à mon idée, l'allocation doit se faire
en bloc, une fois pour toute, au début; ensuite, on "attaque"
les différents tableaux de caractères au sein du gros morceau.
Désolé si ce n'était pas clair au prime abord.


Antoine



Avatar
Stephane Legras-Decussy
"Antoine Leca" a écrit dans le message news:
bh7v48$tft$
En me relisant, je m'aperçois qu'il y a une finesse qui vous a
peut-être induit en erreur: à mon idée, l'allocation doit se faire
en bloc, une fois pour toute, au début; ensuite, on "attaque"
les différents tableaux de caractères au sein du gros morceau.
Désolé si ce n'était pas clair au prime abord.


Ok ... :-)

1 2