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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Probleme d'allocation memoire avec new

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Probleme d'allocation memoire avec new

n°508875
fykman
Errare Humanum Est
Posté le 05-09-2003 à 18:59:34  profilanswer
 

Voici un petit code de test :
 

Code :
  1. class Obj
  2. {
  3. public:
  4. int a;
  5. int b;
  6. int c;
  7. Obj(int A, int B, int C);
  8. ~Obj();
  9. };
  10. Obj::Obj(int A, int B, int C)
  11. {
  12. this->a = A;
  13. this->b = B;
  14. this->c = C;
  15. }
  16. Obj::~Obj()
  17. {
  18. }
  19. int main(int argc, argv char **)
  20. {
  21. for(int i=0; i<1000000; i++) {
  22. Obj *obj = new Obj(i,i+1,i+2);
  23. }
  24. char t;
  25. scanf("%c",&t);
  26. return(0);
  27. }


 
Si je calcule theoriquement la quantite de memoire alloué :
3*sizeof(int) octets par objects = 12 octets/ objects
Donc pour 1 million d'objects :
12*100000 /1024 =  11718 Ko
 
Or si je regarde effectivement ce qui est alloué (gestionnaire des taches), j'ai :
32556 Ko
Donc 32 Mo alloué au lieu de 12 Mo prevu....
 
Quelqu'un peut m'expliquer pourquoi ?


Message édité par fykman le 05-09-2003 à 19:00:26
mood
Publicité
Posté le 05-09-2003 à 18:59:34  profilanswer
 

n°508883
polo021
Posté le 05-09-2003 à 19:09:09  profilanswer
 

65376KO chez moi

n°508885
fykman
Errare Humanum Est
Posté le 05-09-2003 à 19:10:17  profilanswer
 

polo021 a écrit :

65376KO chez moi


faut compiler en release...  ;)

n°508889
Taz
bisounours-codeur
Posté le 05-09-2003 à 19:16:38  profilanswer
 

déjà du bon code
 

Code :
  1. class Obj
  2. {
  3. public:
  4.   int a;
  5.   int b;
  6.   int c;
  7.  
  8.   Obj(int A, int B, int C);
  9. };
  10.  
  11. Obj::Obj(int A, int B, int C)
  12.   : a(A), b(B), c(C)
  13. {}
  14. #include <iostream>
  15.  
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.   for(int i=0; i<1000000; ++i)
  20.     {
  21.       Obj *obj = new Obj(i, i+1, i+2);
  22.     }
  23.   char c;
  24.   std::cin >> c;
  25. }


 
 
après, c'est complètement non fiable cette technique, mieux vau te tourner vers ton API si tu veux des infos

n°508892
fykman
Errare Humanum Est
Posté le 05-09-2003 à 19:22:19  profilanswer
 

Ok pour le code propre,  
par contre le probleme ne viens pas du gestionnaire des taches j'en suis sur (si il se plantait de 20 mo, ca se saurait, hein).
J'ai dans l'idée qu'il doit y avoir une taille minimum de 32 octets allouée par le new... car si on rajoute un autre int a la classe, la taille ne bouge pas.
Mais c'est une suppostion et j'aimerais avoir l'avis d'un connaisseur...  

n°508894
Taz
bisounours-codeur
Posté le 05-09-2003 à 19:23:33  profilanswer
 

fykman a écrit :

Ok pour le code propre,  
par contre le probleme ne viens pas du gestionnaire des taches j'en suis sur (si il se plantait de 20 mo, ca se saurait, hein).

ça se sait
 
sinon regarde le code source de ton allocateur mémoire ... mince tu peux pas. tant pis

n°508895
fykman
Errare Humanum Est
Posté le 05-09-2003 à 19:26:32  profilanswer
 

Taz a écrit :

ça se sait


 
 :pfff:, denigrement systematique et purement subjectif de windows..

n°508896
Taz
bisounours-codeur
Posté le 05-09-2003 à 19:28:50  profilanswer
 

fykman a écrit :


 
 :pfff:, denigrement systematique et purement subjectif de windows..
 

non, c'est un fait qu'on ne peut pas se fier au gestionnaire des tâches.
 
 
enfin classiquement, les allocateurs pour petits morceaux de mémoire sont basé sur le principe de la buddy list

n°508906
blackgodde​ss
vive le troll !
Posté le 05-09-2003 à 19:43:13  profilanswer
 

Taz a écrit :

enfin classiquement, les allocateurs pour petits morceaux de mémoire sont basé sur le principe de la buddy list  


 
quel est-il ?


---------------
-( BlackGoddess )-
n°508907
schnapsman​n
Zaford Beeblefect
Posté le 05-09-2003 à 19:43:46  profilanswer
 

fykman a écrit :


Quelqu'un peut m'expliquer pourquoi ?


 
parce qu'un allocateur de mémoire utilise de la mémoire à son propre usage pour garder trace de certaines informations (comme par exemple la taille d'un bloc alloué).

mood
Publicité
Posté le 05-09-2003 à 19:43:46  profilanswer
 

n°508912
Taz
bisounours-codeur
Posté le 05-09-2003 à 19:46:24  profilanswer
 

http://www.nist.gov/dads/HTML/buddysystem.html pas terrible    [:spamafote]  
il est bien décris dans le O'Reilly sur le noyau Linux  :D  
 
bon je joue google
http://www.memorymanagement.org/articles/alloc.html
http://paul.rutgers.edu/~jarai/314/buddy.html


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Probleme d'allocation memoire avec new

 

Sujets relatifs
Phpmyadmin made in Ovh, problème pour exporter ma baseprobleme update mysql ...
Problème XML XLS php :/probleme de compréhension sur tri quick sort
probleme module PHP chez amen[WML] Probleme sur mon site wap Erreur de balise
[ Delphi ] TObjectList et initialisation memoireproblème mise à jour php 4.3.3(php4ts.dll)
problème de mysql[JS sous Mac] Problème tout idiot :(
Plus de sujets relatifs à : [C++] Probleme d'allocation memoire avec new


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR