46 votes

Pourquoi GCC n'optimise-t-il pas les structures?

Les systèmes exigent que certaines primitives être aligné sur certains points dans la mémoire (ints d'octets qui sont des multiples de 4, shorts d'octets qui sont des multiples de 2, etc.). Bien sûr, ceux-ci peuvent être optimisés afin de gaspiller le moins d'espace dans le rembourrage.

Ma question est pourquoi ne pas GCC faire cela automatiquement? Est le plus évident heuristique (l'ordre des variables de plus grande exigence de taille à la plus petite) manquent pas d'une certaine façon? Code dépend de l'organisation physique de ses structures (est-ce une bonne idée)?

Je ne demande qu'à cause de GCC est super optimisé dans beaucoup de façons, mais pas dans celui-ci, et je me dis, il doit y avoir une relativement cool explication (à laquelle je suis inconscient).

76voto

Damien Neil Points 681

gcc ne réorganise pas les éléments d'une structure, car cela violerait le standard C. La section 6.7.2.1 de la norme C99 stipule:

Dans un objet de structure, les membres sans champ de bits et les unités dans lesquelles résident les champs de bits ont des adresses qui augmentent dans l'ordre dans lequel ils ont été déclarés.

26voto

Cody Brocious Points 24042

Les structures sont fréquemment utilisées comme représentations de l'ordre d'emballage des formats de fichiers binaires et des protocoles réseau. Cela casserait si cela était fait. En outre, différents compilateurs optimiseraient les choses différemment et il serait impossible de relier le code entre eux. Ce n'est tout simplement pas faisable.

11voto

tzot Points 32224

GCC est plus intelligent que la plupart d’entre nous dans la production de code machine à partir de notre code source; Cependant, je frissonne s'il était plus intelligent que nous en réorganisant nos structures, car ce sont par exemple des données pouvant être écrites dans un fichier. Une structure qui commence par 4 caractères, puis par un entier de 4 octets, serait inutile si elle était lue sur un autre système où GCC a décidé de réorganiser les membres de la structure.

7voto

alex strange Points 892

gcc SVN dispose d’une optimisation de la réorganisation de sa structure (-fipa-struct-reorg), mais elle nécessite une analyse complète du programme et n’est pas très puissante pour le moment.

2voto

Pi. Points 2004

Les compilateurs C n'empaquetent pas automatiquement les structures à cause des problèmes d'alignement que vous avez mentionnés. Les accès qui ne se trouvent pas sur les limites des mots (32 bits sur la plupart des processeurs) entraînent de lourdes pénalités sur x86 et provoquent des interruptions fatales sur les architectures RISC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X