Allocation dynamique... [pour les connaisseurs]

Allocation dynamique... [pour les connaisseurs] - C++ - Programmation

Marsh Posté le 04-02-2003 à 18:09:41    

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

Reply

Marsh Posté le 04-02-2003 à 18:09:41   

Reply

Marsh Posté le 04-02-2003 à 18:29:27    

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

Reply

Marsh Posté le 04-02-2003 à 18:31:15    

ç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)
Reply

Marsh Posté le 04-02-2003 à 18:31:30    

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?

Reply

Marsh Posté le 04-02-2003 à 18:32:20    

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...

Reply

Marsh Posté le 04-02-2003 à 18:33:57    

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)
Reply

Marsh Posté le 04-02-2003 à 18:35:40    

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

Reply

Marsh Posté le 04-02-2003 à 18:40:37    

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
Reply

Marsh Posté le 04-02-2003 à 18:43:21    

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)
Reply

Marsh Posté le 04-02-2003 à 18:47:53    

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.

Reply

Marsh Posté le 04-02-2003 à 18:47:53   

Reply

Marsh Posté le 04-02-2003 à 18:52:09    

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

Reply

Marsh Posté le 04-02-2003 à 19:05:33    

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

Reply

Marsh Posté le 04-02-2003 à 19:14:12    

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

Reply

Marsh Posté le 04-02-2003 à 20:51:19    

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 ?

Reply

Marsh Posté le 04-02-2003 à 21:00:18    

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

Reply

Marsh Posté le 04-02-2003 à 21:05:47    

++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!!
Reply

Marsh Posté le 05-02-2003 à 06:44:27    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed