qqn pourrait me confirmer que l'ordre des champs dans une structure est important pour optimiser la mémoire??
Plus concrètement est ce que les champs les plus gourmands en memoire doivent etre stockés en premier??
D'avance Merci.
qqn pourrait me confirmer que l'ordre des champs dans une structure est important pour optimiser la mémoire??
Plus concrètement est ce que les champs les plus gourmands en memoire doivent etre stockés en premier??
D'avance Merci.
Sur certaines architectures, pour des raisons d'optimisation, les données de certains types sont soumises à certaines contraintes d'alignement. Sur ma machine, les entiers de type int sont alignés sur une adresse mémoire multiple de 4. On a donc:
Sur ma machine, ce programme donne la sortie suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <stdio.h> #include <stdlib.h> struct test1 { char c1; char c2; char c3; int x; int y; }; struct test2 { char c1; int x; char c2; int y; char c3; }; int main(void) { printf("La taille de struct test1 est de %u bytes\n", sizeof(struct test1)); printf("La taille de struct test2 est de %u bytes\n", sizeof(struct test2)); return 0; }
Thierry
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 La taille de struct test1 est de 12 bytes La taille de struct test2 est de 20 bytes
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Moui... On peut aussi essayer de compléter les trous avec de petits champs. Mais souvent, c'est l'utilisation des champs de bits qui fait réellement gagner de la place.Envoyé par oussema
Fait péter.
Pas de Wi-Fi à la maison : CPL
Ou de s'arranger pour que ça tombe sur des nombres pairs :Envoyé par Emmanuel Delahaye
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 struct s1 { double d1 ; char c1 ; char c2 ; int i1 ; char c3 ; char c4 ; } ;
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Ca dépend de l'archi! Chez moi, les ints sont alignés sur des adresses multiples de 4. Ta structure ci-dessus a une taille de 20 bytes contre 16 bytes pour la structure suivante:Envoyé par souviron34
Thierry
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 struct s2 { double d1 ; char c1 ; char c2 ; char c3 ; char c4 ; int i1 ; };
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Exactement. Il n'y a pas d'optimisation portable.Envoyé par mujigka
Pas de Wi-Fi à la maison : CPL
absolument je suis bien d'accord. Je disais juste qu'on peut minimiser, comme tu disais avec les trous, je disais aussi avec les nombres pairs (tomber sur les frontières . Et effectivement on peut tenter de tomber sur les multiples de 4.)
lol ya pas encore le symbole peace and love
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
A priori, ce sera toujours minimal si tu les ordonnes du plus gros au plus petit (sous réserve que cet ordre soit toujours le même).Envoyé par Emmanuel Delahaye
Peut être... C'est la stratégie d'allocation des segments de données du linker Intel du 8051, mais ce n'est pas forcément la plus optimisée... Je crois que le but, c'est de tout caser, pas d'optimiser...Envoyé par Ulmo
C'est comme quand on place les bateaux quand on joue à la bataille navale... On commence par les gros... Cet algo de placement doit avoir un nom savant que j'ignore... (jamais étudié les algos, c'est un tord, oui, on ne pas tout faire...)
Pas de Wi-Fi à la maison : CPL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager