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

  FORUM HardWare.fr
  Programmation
  C++

  Allocation dynamique... [pour les connaisseurs]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Allocation dynamique... [pour les connaisseurs]

n°301263
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 04-02-2003 à 18:09:41  profilanswer
 

Y'a t'il un risque à utiliser la fonction alloca() plutôt que malloc siou plé?
 
thx:)

mood
Publicité
Posté le 04-02-2003 à 18:09:41  profilanswer
 

n°301274
Taz
bisounours-codeur
Posté le 04-02-2003 à 18:29:27  profilanswer
 

ben regarde le man et souvient toi que la pile est bien plus petite sue le tas

n°301277
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-02-2003 à 18:31:15  profilanswer
 

ça dépend la taille de ta pile ! tu risques un débordement de pile si tu alloues une valeur trop grande.
 
par contre, évite d'utiliser alloca() comme argument à une fonction ! étant donné qu'alloca() alloue de la mémoire sur la pile, et que tu empiles les arguments, tu risques de te retrouver avec un beau bordel... :/
 
question : pourquoi alloca() ?
 
edit: j'oubliais ! une fois que tu sors de ta fonction, tu perds l'espace alloué...


Message édité par Harkonnen le 04-02-2003 à 18:32:43

---------------
J'ai un string dans l'array (Paris Hilton)
n°301278
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 04-02-2003 à 18:31:30  profilanswer
 

J'ai jeté un coup d'oeil, il n'y pas grand chose à pars effectivement le fait que alloca utilise la pile.
 
Bien plus petite, ce qui annonce un risque de débordement mémoire si l'appliquation est conséquente?

n°301279
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 04-02-2003 à 18:32:20  profilanswer
 

Harkonnen a écrit :

ça dépend la taille de ta pile ! tu risques un débordement de pile si tu alloues une valeur trop grande.
 
par contre, évite d'utiliser alloca() comme argument à une fonction ! étant donné qu'alloca() alloue de la mémoire sur la pile, et que tu empiles les arguments, tu risques de te retrouver avec un beau bordel... :/
 
question : pourquoi alloca() ?


 
Eh bien visiblement alloca est nettement plus rapide en terme d'execution que malloc...

n°301280
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-02-2003 à 18:33:57  profilanswer
 

Fodger a écrit :


 
Eh bien visiblement alloca est nettement plus rapide en terme d'execution que malloc...


franchement, le gain de vitesse justifie t'il tous les inconvénients sus-cités ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°301282
Taz
bisounours-codeur
Posté le 04-02-2003 à 18:35:40  profilanswer
 

non. de toutes façons la pile n'est pas faite pour les allocations dynamiques, point final.

n°301285
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 04-02-2003 à 18:40:37  profilanswer
 

Et bien j'applique des calculs très très lourds (genre ça peut prendre plus d'une heure), alors je cherche à optimiser, seulement j'ai du mal à trouver des sites explicites...


Message édité par fodger le 04-02-2003 à 18:41:44
n°301286
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-02-2003 à 18:43:21  profilanswer
 

Fodger a écrit :

Et bien j'applique des calculs très très lourds (genre ça peut prendre plus d'une heure), alors je cherche à optimiser, seulement j'ai du mal à trouver des sites explicites...

avant de chercher à optimiser de cette façon, je pense d'abord qu'il faut optimiser l'algo... sans doute gagneras tu quelques millisecondes, mais tu seras obligé de faire quantité de tests pour éviter tout débordement, et au final, tu perdras de la vitesse d'éxécution...
et comme dit Taz, la pile n'est pas faite pour ça !


---------------
J'ai un string dans l'array (Paris Hilton)
n°301291
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 04-02-2003 à 18:47:53  profilanswer
 

Oui je suis bien d'accord, mais l'optimisation de l'algo dans mon cas reste limité... alors du coup je cherche à m'attaquer directement aux instructions, aux affections...  
J'ai fait en sorte aussi d'utiliser au maximum les multiplications plutôt que les divisions, des petits trucs comme ça.

mood
Publicité
Posté le 04-02-2003 à 18:47:53  profilanswer
 

n°301296
Taz
bisounours-codeur
Posté le 04-02-2003 à 18:52:09  profilanswer
 

montres un peu... y a surement un moyen de réduire tes allocations dynamiques

n°301300
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 04-02-2003 à 19:05:33  profilanswer
 

Bein ne le prends pas mal, mais je ne peux pas:D, 'cause secret pro:sweat:...
 

n°301303
Taz
bisounours-codeur
Posté le 04-02-2003 à 19:14:12  profilanswer
 

:o comment veux tu qu'on t'aide :heink:

n°301354
bjone
Insert booze to continue
Posté le 04-02-2003 à 20:51:19  profilanswer
 

qu'est-ce que tu pourrais précalculer ?
 
qu'est-ce que tu pourrais retirer des boucles les plus imbriquées et remettre dans les boucles supérieures ?
 
tes allocations sont elles si consommatrices ? (as-tu essayé de bencher/profiler le temps passé en alloc )
 
peux-tu passer par un pool intelligent :  
du style si tu as un tableau dynamique au lieu de realloc a chaque élement faire un realloc par pavé de 100 éléments quand c'est nécessaire, as-tu droit à la stl, dont vector<> pour commençer ?
 
tes structures de données sont-elles correctement alignés vis à vis du cache du cpu ? (y'a-t-il moyen de réorganiser les structures pour maximzer l'éfficacité du cache)
 
est-tu dépendant d'accès disque ?
 
etc... etc...
 
C'est quoi que tu fait ?
L'algo ?

n°301362
Taz
bisounours-codeur
Posté le 04-02-2003 à 21:00:18  profilanswer
 

ici on parle de C, donc tout ce qui est STL ou vector, ça n'existe pas

n°301367
Willyzekid
Posté le 04-02-2003 à 21:05:47  profilanswer
 

++Taz a écrit :

ici on parle de C, donc tout ce qui est STL ou vector, ça n'existe pas


 
y en a encore (sisi) qui utilise malloc, printf, etc. en C++ ;)


---------------
Horizon pas Net, reste à la buvette!!
n°301954
Musaran
Cerveaulté
Posté le 05-02-2003 à 06:44:27  profilanswer
 

alloca n'est pas standard, donc pas portable.
 
La mémoire n'est pas libérée à la fin du bloc, mais à celle de la fonction.
Donc, si on l'utilises dans une boucle le cumul peut vite saturer:

Code :
  1. for(int i=0 ; i!=1024*1024 ; ++i)
  2. _alloca(1024); //stack overflow


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

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

  Allocation dynamique... [pour les connaisseurs]

 

Sujets relatifs
creer un menu dynamique (du style déroulant).menu dynamique en js compatible ie 5,6 et nscp 7, c possible ?
[?HTML/PHP?] combo dynamique[Perl] chemin des modules dynamique...
[T-SQL] Nom de colonne dynamique pour une table TEMPO !!!REMERCIEMENT + qq questions array dynamique.
Gestion de nom de variables dynamique (rapide... help)[VB]création dynamique d'objets et index....
envoi dynamique de donnéecombobox dynamique
Plus de sujets relatifs à : Allocation dynamique... [pour les connaisseurs]


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