 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
meow Guest
|
Posted: Mon Aug 08, 2005 1:21 pm Post subject: Quand utiliser la STL plutot qu'un tableau ? |
|
|
Je suis en train d'implémenter des carreaux de Bezier : à peu de
chose près, un entier n (le degré) et un tableau de (n+1)*(n+2)/2
entrées où stocker les "points de controle".
Bref, je me demandais s'il était préférable d'utiliser un type
vector ou un pointeur pour stocker mes points de controle... J'imagine
qu'il y a du plus comme du moins pour les deux solutions mais j'ai un
peu de mal à évaluer tout ça. Pourrez vous m'aider ?
--Ben
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Aug 08, 2005 1:30 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
On 8 Aug 2005 06:21:25 -0700, "meow" <ben (AT) agat (DOT) net>:
| Quote: | Quand utiliser la STL plutot qu'un tableau ?
|
Ta question me paraît mal formulée. Le type "tableau" par défaut, en
C++, est std::vector<>.
En d'autres termes, utilise std::vector<> sauf si tu as une bonne
raison d'utiliser autre chose.
Même quand je dois implémenter un type particulier de tableau (par
exemple, un mélange de vector<> et de map<>), la plupart du temps, en
interne, c'est un vector<> qui s'occupe de contenir les données.
|
|
| Back to top |
|
 |
meow Guest
|
Posted: Mon Aug 08, 2005 2:09 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un *Point plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?
|
|
| Back to top |
|
 |
meow Guest
|
Posted: Mon Aug 08, 2005 2:09 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un Point* plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?
|
|
| Back to top |
|
 |
adebaene@club-internet.fr Guest
|
Posted: Mon Aug 08, 2005 2:58 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
meow a écrit :
| Quote: | Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un Point* plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?
|
Le gain serait négligeable 99% du temps.
Comme toujours dans ces cas là, commences par faire un programme
simple et correct, et *uniquement* s'il s'avère à l'usage qu'il y a
un problème de performances, préoccupes-toi de :
1) Utiliser un profiler pour mesurer et identifier les portions de code
qui posent un problème.
2) Micro-optimiser ses portions de code.
Les seules optimisations dont il faut se soucier en amont du codage, ce
sont les optimisations d'algorithme (qui de toute façon ont
généralement bien plus d'impact que les choix du type "vector VS
tableau-à-la-C"
Arnaud
|
|
| Back to top |
|
 |
Bruno CAUSSE Guest
|
Posted: Mon Aug 08, 2005 3:11 pm Post subject: Re : Quand utiliser la STL plutot qu'un tableau ? |
|
|
dans l'article [email]1123513098.237043.296170 (AT) g44g2000cwa (DOT) googlegroups.com[/email],
[email]adebaene (AT) club-internet (DOT) fr[/email] à [email]adebaene (AT) club-internet (DOT) fr[/email] a écrit le 8/08/05
16:58 :
| Quote: | Les seules optimisations dont il faut se soucier en amont du codage, ce
sont les optimisations d'algorithme (qui de toute façon ont
généralement bien plus d'impact que les choix du type "vector VS
tableau-à-la-C"
|
Hum...
Je suis debutant, alors je vais surement dire une conerie, mais les données
d'un conteneur list vector.... sont stockés dans le tas (avec des new et
delete transparents pour l'utilisateur). Donc si tu crée bcq d'objet
"automatiques" contenant des conteneurs les perfs sont beaucoup moins
bonnes.
|
|
| Back to top |
|
 |
JBB Guest
|
Posted: Mon Aug 08, 2005 3:16 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
meow a écrit :
| Quote: | Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un Point* plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?
Tu peux aussi coder en assembleur pour gagner un peu de temps |
d'execution et de mémoire.
Mais le temps que tu vas passer en plus à coder et à debugger ton
programme pour gagner 10 malheureux petits % en performances, et bien
pendant ce temps là le PC moyen aura gagné en moyenne bien plus que ça.
Donc sauf si ton programme est destiné à être déployé sur des millions
d'équipements sur lesquels augmenter la RAM revient du coup tres cher,
ce ne sera pas rentable.
A l'heure actuelle 512 Mo de RAM coutent 50€uros soit grosso-modo une
heure-homme d'un ingénieur de SSI.
Apprends plutôt la STL ça te sera bien plus bénéfique.
Le seul intêret de faire autrement est à des fin pédagogique afin de
comprendre le fonctionnement interne de la mémoire et se rendre compte
par soi même tous les problemes que cela génère.
|
|
| Back to top |
|
 |
JBB Guest
|
Posted: Mon Aug 08, 2005 3:16 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
La réponse est donc : tout le temps.
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Aug 08, 2005 3:30 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
On Mon, 08 Aug 2005 17:16:50 +0200, JBB <merci (AT) pasdespam (DOT) fr>:
| Quote: | La réponse est donc : tout le temps.
|
Sauf bien sûr quand il vaut mieux faire autrement :-)
Si la taille du tableau est constante et connue à la compilation, un
tableau à la C est aussi bien que vector<>. En pratique, on utilise
vector<> quand même, car ça facilite l'évolution du code.
Il existe quand même un cas où le tableau à la C est utile (je crois
que c'est le seul cas, mais je peux me tromper) : l'initialisation
statique.
static int const machin[]= { 13, 26, 99 };
|
|
| Back to top |
|
 |
nico Guest
|
Posted: Mon Aug 08, 2005 4:04 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
Salut,
| Quote: | Quand utiliser la STL plutot qu'un tableau ?
Réponse simple : tout le temps. |
--
nico
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Mon Aug 08, 2005 5:34 pm Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
Bruno CAUSSE wrote:
| Quote: | dans l'article [email]1123513098.237043.296170 (AT) g44g2000cwa (DOT) googlegroups.com[/email],
[email]adebaene (AT) club-internet (DOT) fr[/email] à [email]adebaene (AT) club-internet (DOT) fr[/email] a écrit le
8/08/05 16:58 :
Les seules optimisations dont il faut se soucier en amont du codage,
ce sont les optimisations d'algorithme (qui de toute façon ont
généralement bien plus d'impact que les choix du type "vector VS
tableau-à-la-C"
Hum...
Je suis debutant, alors je vais surement dire une conerie, mais les
données d'un conteneur list vector.... sont stockés dans le tas (avec
des new et delete transparents pour l'utilisateur). Donc si tu crée
bcq d'objet "automatiques" contenant des conteneurs les perfs sont
beaucoup moins bonnes.
|
Peut-être, et *si il s'avère que c'est un problème*, on en tiendra compte...
Si la taille du tableau est connue à la compilation (c'est rare, mais çà
arrive), j'ai tendance à utiliser boost::array : je trouve que ca rend le
code plus lisible, et çà a un surcout pour ainsi dire nul.
Anaud
|
|
| Back to top |
|
 |
stephane_www Guest
|
Posted: Tue Aug 09, 2005 8:39 am Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
Arnaud Debaene wrote:
[...]
| Quote: |
Peut-être, et *si il s'avère que c'est un problème*, on en tiendra compte...
Si la taille du tableau est connue à la compilation (c'est rare, mais çà
arrive), j'ai tendance à utiliser boost::array : je trouve que ca rend le
code plus lisible, et çà a un surcout pour ainsi dire nul.
Donc std::vector a un surcout non nul  |
|
|
| Back to top |
|
 |
meow Guest
|
Posted: Tue Aug 09, 2005 8:40 am Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
| Quote: | Tu peux aussi coder en assembleur pour gagner un peu de temps
d'execution et de mémoire.
Pas la peine d'etre méprisant, il y a un gap entre l'utilisation des |
pointeurs et le passage à l'assembleur.
| Quote: | Mais le temps que tu vas passer en plus à coder et à debugger ton
programme pour gagner 10 malheureux petits % en performances, et bien
pendant ce temps là le PC moyen aura gagné en moyenne bien plus que ça.
C'est là le noeud de ma question : il y a donc un gain linéaire de |
l'ordre de 10% au prix de la gestion de la mémoire... Ok, merci.
| Quote: | A l'heure actuelle 512 Mo de RAM coutent 50€uros soit grosso-modo une
heure-homme d'un ingénieur de SSI.
Cela n'a rien à voir avec le thread, mais pour info, le passage de |
512Mo à 1Go sur ma machine (un portable SONY VAIO... Quelle idée !?
Plus jamais ça...) me coutera pas moins de 450€
J'en retiens donc que le gain en temps et en place, s'il existe, est
vraiment minime. Et qu'il vaut donc mieux utiliser la STL. Merci à
tous pour vos réponses.
|
|
| Back to top |
|
 |
adebaene@club-internet.fr Guest
|
Posted: Tue Aug 09, 2005 9:07 am Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
stephane_www a écrit :
| Quote: | Arnaud Debaene wrote:
[...]
Peut-être, et *si il s'avère que c'est un problème*, on en tiendra compte...
Si la taille du tableau est connue à la compilation (c'est rare, maisçà
arrive), j'ai tendance à utiliser boost::array : je trouve que ca rend le
code plus lisible, et çà a un surcout pour ainsi dire nul.
Donc std::vector a un surcout non nul
|
Je n'ai pas dit qu'il était nul, j'ai dit qu'il était négligeable,
et encore je me suis mal exprimé. Il faudrait plutôt dire "99% du
temps le surcôut engendré par l'utilisation de std::vector n'a pas
d'impact sensible sur les performances du logiciel".
Si j'utilises parfois boost::array, c'est d'ailleurs plus pour
clarifier la sémantique (j'indique clairement que c'est un tableau de
taille fixe et connue) que pour des raisons de performances.
Arnaud
|
|
| Back to top |
|
 |
Matthieu Moy Guest
|
Posted: Tue Aug 09, 2005 9:10 am Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? |
|
|
[email]adebaene (AT) club-internet (DOT) fr[/email] writes:
| Quote: | Si j'utilises parfois boost::array, c'est d'ailleurs plus pour
clarifier la sémantique (j'indique clairement que c'est un tableau de
taille fixe et connue) que pour des raisons de performances.
|
Je connais pas boost::array, mais il y a un truc chiant avec
std::vector, c'est que tu as besoin d'un constructeur de recopie, et
donc, on ne peut pas mettre des objets dont ce constructeur a été
désactivé (ou alors, on rajoute une couche de pointeurs, mais on
obtient un truc plutôt pire qu'un tableau "C").
--
Matthieu
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|