Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4370 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[C++] Utilisation memoire trop importante

n°453155
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-07-2003 à 00:32:03  profilanswer
 

Reprise du message précédent :

++Taz a écrit :

oui sans doute. cela dit, tout dépend du compilateur qui est libre d'implémenter tout ça comme il veut. mais bon, ça c'est des economies de pauvre, on a jamais vu de problème de mémoire avec.

C'était plus par curiosité qu'autre chose :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
mood
Publicité
Posté le 10-07-2003 à 00:32:03  profilanswer
 

n°453156
Taz
bisounours-codeur
Posté le 10-07-2003 à 00:36:37  profilanswer
 

par contre quelque chose d'interessant quand on veut faire de l'optimisation agressive mais pas destructrice (enlever des virtual, c bien mais le jour ou on réutilise...), c'est de bien maitriser la déclaration des champs de ses structures/classes: gaffe aux bits de bourrage, on peut perdre inutilement quelques octets

n°453165
Konar
Posté le 10-07-2003 à 01:10:45  profilanswer
 

++Taz a écrit :

par contre quelque chose d'interessant quand on veut faire de l'optimisation agressive mais pas destructrice (enlever des virtual, c bien mais le jour ou on réutilise...), c'est de bien maitriser la déclaration des champs de ses structures/classes: gaffe aux bits de bourrage, on peut perdre inutilement quelques octets


 
ouais j'ai découvert ca y a pas longtemps, avec un truc du genre :
 
struct s1
{
   char c1;
   int i;
   char c2;
}
 
et
 
struct s2
{
   int i;
   char c1;
   char c2;
}
 
on a sizeof (s1) == 12 et sizeof (s2) == 8
 
en anglais on appelle ca le padding je crois, qu'est par défaut de 4. par contre me souviens plus comment on l'élimine, sauf sous VC++, avec un "pragma pack()" je crois.
c'est meme pas de l'optimisation, il parait que le code généré est moins efficace quand les struct sont pas alignées (enfin bon, chuis pas sur...)
 
edit : j'ai retrouvé la page, ca explique bien le truc :
http://msdn.microsoft.com/library/ [...] errors.asp


Message édité par Konar le 10-07-2003 à 01:17:16
n°453170
Taz
bisounours-codeur
Posté le 10-07-2003 à 01:47:31  profilanswer
 

ton pragme c'est de la contre optimisation certes, mais réarranger sa structure à la main, ça n'a aucun contre-cout ni effet indésirable. la taille du padding dépend de l'architecture et du type de données. la règle générale est de regrouper la déclaration des champs de même types


Message édité par Taz le 10-07-2003 à 01:48:54
n°453233
chrisbk
-
Posté le 10-07-2003 à 08:47:50  profilanswer
 

Konar a écrit :


 
ouais j'ai découvert ca y a pas longtemps, avec un truc du genre :(...)library/en-us/pgalpha98/html/avoiding_alignment_errors.asp


 
ouaip faut tjs mettre les champs les plus gros au dessus. Non seulement t'economise un peu de place mais tu peux aussi avoir un (leger bien sur, sauf si tu utilises le SSE ou la ca sera obligatoire :D) gain de vitesse vu que tes membres auront plus de chance d'etre correctement alignés (a vrai dire suffira que le premier soit aligné pour que les autres le soient). Ca coute pas cher et c tjs ca de pris


Message édité par chrisbk le 10-07-2003 à 08:49:51
n°453513
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-07-2003 à 12:59:01  profilanswer
 

ca marche comment exactement cette histoire d'alignement ?


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°453521
chrisbk
-
Posté le 10-07-2003 à 13:06:50  profilanswer
 

en gros :
 
(Adresse de ta donnee) % sizeof(donnee) doit etre egal a 0
 
Partant de la, si tu met les plus grosses donnees en premier (double) et qu'elle est alignée, alors les autres données de ta struct le seront aussi (alignement naturel)
 
http://forum.hardware.fr/forum2.ph [...] 439&cat=10
 


Message édité par chrisbk le 10-07-2003 à 13:07:36
n°453526
skeye
Posté le 10-07-2003 à 13:11:15  profilanswer
 

chrisbk a écrit :


ouaip faut tjs mettre les champs les plus gros au dessus. Non seulement t'economise un peu de place mais tu peux aussi avoir un (leger bien sur, sauf si tu utilises le SSE ou la ca sera obligatoire :D) gain de vitesse vu que tes membres auront plus de chance d'etre correctement alignés (a vrai dire suffira que le premier soit aligné pour que les autres le soient). Ca coute pas cher et c tjs ca de pris


Je prends note!
Si seulement ca pouvait accélérer mon appli... :ange:

n°453527
Taz
bisounours-codeur
Posté le 10-07-2003 à 13:12:16  profilanswer
 

joce a écrit :

ca marche comment exactement cette histoire d'alignement ?

c'est à dire? ben c'est justement une question d'alignement. pour les entiers, l'acces est plus rapide si les données sont alignés en fonction de la taille du bus. pour les flottants, il me semble que les normes IEEE imposent une contrainte forte sur l'alignement.
 
enfin si tu fais ça
 
char c;
int i;
 
sur un x86 tu risques d'avoir 3octets de padding entre les 2 membres. ça n'est pas evitable, sauf directive de compilation. l'acces mémoire est alors sub-optimal (en général) mais ça gagne de la place. l'interet de déclarer cote à cote des données de meme type ne demande pas de padding entre elles, puisque ces données sont toutes correctement alignés.
 
enfin bon, c'est anecdotique, mais ça peut rendre service des fois. mais y aura toujours un minimum de padding. de toutes façons du padding, t'es as partout, jusque dans les pages pour avoir un alignement avec les ligne de cache :pt1cable:

n°453528
chrisbk
-
Posté le 10-07-2003 à 13:12:59  profilanswer
 

skeye a écrit :


Je prends note!
Si seulement ca pouvait accélérer mon appli... :ange:  


 
attention tu entre la dans le domaine de l'optimisation bas niveau 3lite w4rlord oldsch00l [:aloy]

mood
Publicité
Posté le 10-07-2003 à 13:12:59  profilanswer
 

n°453531
Taz
bisounours-codeur
Posté le 10-07-2003 à 13:14:15  profilanswer
 

skeye a écrit :


Je prends note!
Si seulement ca pouvait accélérer mon appli... :ange:  

rien à voir. ce qui est important c'est les types, pas la position.
 
 
int i;
char c;
 
donne la meme chose que
 
char c;
int i;

n°453535
skeye
Posté le 10-07-2003 à 13:15:38  profilanswer
 

chrisbk a écrit :


 
attention tu entre la dans le domaine de l'optimisation bas niveau 3lite w4rlord oldsch00l [:aloy]
 


:lol:
Je vais pas trop toucher à tout ca, je m'en sortirai pas...mais si mettre les membres de grande taille au début suffit à accélérer le brol je vais pas m'en priver...de toute façon j'ai rien à perdre! [:skeye]

n°453538
chrisbk
-
Posté le 10-07-2003 à 13:16:40  profilanswer
 

++Taz a écrit :

rien à voir. ce qui est important c'est les types, pas la position.
 
 
int i;
char c;
 
donne la meme chose que
 
char c;
int i;


 
Depend si ton compilo padd le tout ou pas, sinon alors le deuxieme est - rapide que le premier. Note que ne serait ce que pour gagner trois octets on a tout interet a utiliser le premier
 
skeye : heuh t'attends pas a tomber de ta chaise devant tes nouvelles perfs hein ? :D
 


Message édité par chrisbk le 10-07-2003 à 13:17:30
n°453574
skeye
Posté le 10-07-2003 à 13:49:34  profilanswer
 

chrisbk a écrit :


 
Depend si ton compilo padd le tout ou pas, sinon alors le deuxieme est - rapide que le premier. Note que ne serait ce que pour gagner trois octets on a tout interet a utiliser le premier
 
skeye : heuh t'attends pas a tomber de ta chaise devant tes nouvelles perfs hein ? :D
 
 


:lol: nonon, mais tout gain est appréciable vu les quantités de données que je traite... [:skeye]
Mes images en 2400*3200 font "légèrement" souffrir les p2 du taf... :pt1cable:

n°453589
HelloWorld
Salut tout le monde!
Posté le 10-07-2003 à 14:08:41  profilanswer
 
n°453652
skeye
Posté le 10-07-2003 à 14:47:39  profilanswer
 


 

Citation :


Not Found
The requested URL /Assembly/VolumeFrames.html was not found on this server.
 
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.  

n°453792
HelloWorld
Salut tout le monde!
Posté le 10-07-2003 à 16:02:14  profilanswer
 

Bizarre ... le lien de la barre de titre ne marche pas dans une autre fenêtre ...
http://oopweb.com/Assembly/Documen [...] rames.html
Chapitre 3, -> 3.1.2 "The Memory Subsystem"


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°453876
xilebo
noone
Posté le 10-07-2003 à 16:42:54  profilanswer
 

(j ai pas tout lu le topic ca a peut etre deja été dit)
 
il faut savoir que si tu declares un tableau genre char tab[9] bah il fera pas 9 octets en memoire mais 12.  
 
C du au fait qu on travaille en 32 bits et donc que les lectures se font 32bits par 32 bits. C est donc plus rapide a lire.
 
C est d ailleurs pour cela que le bool (en minuscule ) est "inutile" si c est pour gagner de la place car en memoire il prend 4 octets.
 
Par contre je ne sais pas pour l allocation dynamique.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[VBA/VB] Utilisation d'une dll - Localisation de la dllProbleme d utilisation d une DLL externe
Utilisation de TabStrip [Résolu]Impossible d'afficher un bitmap transparent dans un DC memoire...
Script Liberation mémoire vive ?[C/C++] - Librairies DLL et ActiveX pour l'utilisation du RS232
[JAVA] Augmenter la mémoire dispo pour la machine virtuelleUtilisation du composant MSCHART : pblm de diffusion (MSDATASRC)
Utilisation de JNI dans une appli webPb de requete sous ACCESS (utilisation de max)
Plus de sujets relatifs à : [C++] Utilisation memoire trop importante


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)