cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
3 oct. 2004 à 10:16
toxv
Messages postés1Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention 2 avril 2006
-
2 avril 2006 à 14:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
toxv
Messages postés1Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention 2 avril 2006 2 avril 2006 à 14:42
L'utilisation d'un pointeur ou d'un index pour accéder aux éléments d'un tableau ne fait absolument aucune différence ! Le compilateur fait toujours comme il veut... j'irai même plus loin :
- un bon compilateur doit produire un code identique dans les deux cas.
- et croire que l'utilisation de pointeur ou dun index fait une différence est une grave erreur (de débutant)...
cs_cynix
Messages postés20Date d'inscriptiondimanche 7 novembre 2004StatutMembreDernière intervention 9 mars 2009 13 août 2005 à 12:51
le fait est que la taille des pointeurs est variable et peut-etre libérée de la memoire a tout moment contrairement aux tableaux qui prennent un certain espace défini du debut a la fin du prog.
stephane_1979
Messages postés9Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention14 octobre 2004 12 oct. 2004 à 09:16
Salut à tous,
AlexMan > l'utilisation des pointeurs plutot que l'utilisation de tableaux est TRES avantageuse quand on développe sur des systèmes embarqués qui ont en majorité des processeurs largement plus lent que ceux d'un PC ou un MAC. Mais aussi les Systèmes embarqués ont beaucoup moins d'espace mémoire et les tableaux en prennent énormement.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 5 oct. 2004 à 21:26
shell > je suis tt a fait daccord que le resultat est le meme, c'est ce que j'ai voulu dire ds mon message precedent...ce que j'ai dit est simplement que l'ecriture est alourdie (et seulement l'ecriture) lorsque tu utilise des pointeurs, dc quand tu peux eviter et utiliser une reference ca te fait un code moins "lourd" (pas en terme de performance mais de lisibilité et d'écriture)
sinon on est d'accord
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 5 oct. 2004 à 20:47
leprov> Comme dirait BruNews NENNI!
Références et pointeurs sont strictements identiques d'un point de vue résultats et otpimisations.
La seule différence réside dans leur utilisation.
Une référence est plus simple a utiliser.
Maintenant a chacun son droit d'y trouver son profit dans l'une ou l'autre des méthodes.
Pour te simplifier la chose dit toi que référence = pointeur syntaxiquement simplifié.
Shell
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 3 oct. 2004 à 23:14
shell > j'ai vu un message que tu as ecrit plus haut.....si on est bien en c++, pour economiser 4 octets dans le cas du passage d'un double en parametres d'un fonction, on n'utilise pas un pointeur qui alourdit l'ecriture mais une référence -> cette remarque est valable en c mais pas en c++
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 3 oct. 2004 à 18:53
je pense que le tuto est moyen, il y a les grandes bases mais certains points sont a revoir
d'abord il faut que ce soit du c, a cause des void* et du transtypage a la "c", donc les cout << n'ont rien a faire ici
int i = pi2 - pi; c'est dangeureux et non portable, en c il ne faut jamais presupposer la logique d'adressage de la machine sur laquel on travail (un decalage d'adresse peut ne pas etre negatif), la maniere la plus portable est d'utilisée le type prevu pour, ptrdiff_t defini dans le standard
il ne faut pas croire que parcourir un tableau avec un pointeur est plus performant, il vaut mieux utiliser l'operateur [] et laisser faire l'optimiseur, comme plus_plus_fab l'a dit
ca aurais ete bien aussi de parler d'autres subtilités comme le cast de l-value
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 3 oct. 2004 à 16:57
equivalent du point de vue algorithmique !
un algorithme en O(n+1) est equivalent à O(n), et un autre algo en O(n+100000) est equivalent à O(n).
O(n+100000) est plus lent que O(n+1) mais ils ont tout les deux la meme complexité algorithmique. Il faut voir ça lorsque n tend vers l'infini.
C'est plus clair ?
comme je le disais, de toute façon, ça reviens au meme avec un compilateur digne de ce nom.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 oct. 2004 à 16:50
Je trouve ta réponse contradictoire: si c'est "un chouia plus lent", ce n'est pas équivalent, surtout que le chouia se multiplie.
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 3 oct. 2004 à 16:42
C'est équivalent du point de vue algorithmique, c'est ce qu'on appelle un acces aléatoire (en O(1)), il ya un cout ridicule à ajouter 4 à p, donc dans l'absolue, c'est un chouia plus lent.
Mais actuellement, tous les compilateurs traduisent les parcours de tableau à l'aide de pointeurs. Donc que tu parcours un tableau avec un pointeur ou en accedant à un élément avec p[i] (= *(p+i) ), c'est identique.
@+
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 oct. 2004 à 16:27
Une question que je me suis toujours posée:
si p est un int*,
est-il plus rapide de faire *p que *(p + 4), ou est-ce équivalent?
Si la premiere est plus rapide, l'utilité d'un pointeur est indénialbe par rapport à un tableau lors d'un parcours.
Par curiosité, quel était le titre initial du source?
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 3 oct. 2004 à 15:16
un pointeur, ça va sur la pile, comme les variables locales. il y a un nombre plutot limité de registre d'ailleurs ... Seul les pointeurs (ou variables) non déclarés volatile et "élus" pas le compilo y auront acces.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 oct. 2004 à 14:58
"rien a voir, le compilo fournira un code optimisé donc comme il le souhaite, mais un pointeur ne pourra pas etre transposé autrement ke sous la forme dun registre car optimisé au max. "
Voila ce ke je dirais, mais je ne suis pas sur a 100%, donc jattend la confirmation d"une personne tierce et ne dis ca ke de maniere incertaine, donc ce n'est pas a prendre en compte..
++
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 3 oct. 2004 à 14:48
"Bien sur ke les pointeurs ont un grand intéret, leur traduction en asm sera parfaite pour le compilo : un registre. "
pas forcément !
le compilateur fait ce qu'il veut ! Il y a le mot clé register pour demander à ce qu'une variable (ou pointeur) soit dans un registre, mais meme avec ça, le compilo peut tres bien ne pas tenir compte de cette recommandation, alors impossible de le garantir ...
++fab
Alpacha
Messages postés95Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention20 mars 2006 3 oct. 2004 à 13:21
merci
j'ai justement fait un tuto la-dessus car c'est très important et parfois bizarre à comprendre
en espérant que ca éclaire ceux pour qui cette notion est encore floue
Alp
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 3 oct. 2004 à 13:18
Je viens de le survoler et il a l'air très bien ce petit tuto. :)
Bonne initiative parce que c'est important de bien comprendre la notion de pointeur, ca servira à pas mal de débutants à mon avis.
Je le lirai bientôt dans son intégralité et je te dirai si je trouve qqchose de bizarre, mais à prioris si AlexMAN et DeAtHCrAsH n'ont rien trouvé de particulier, j'en trouverai pas plus.
Merci à tous ceux qui prennent le temps de faire des tutos.
eRoZion
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 3 oct. 2004 à 12:01
AlexMan> Oui en effet l'exemple est plutot mal choisi.
Alpacha> Ecoute AlexMan et change ton exemple pour en mettre un plus paralant.
Shell
Alpacha
Messages postés95Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention20 mars 2006 3 oct. 2004 à 11:37
ahhh ok
ben forcément l'exemple n'est qu'un exemple pour expliquer à ceux qui ne voient pas encore bien ce que c'est à quoi ca sert, ou simplement ceux pour qui c'est flou
A+
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 oct. 2004 à 11:36
Bien sur ke les pointeurs ont un grand intéret, leur traduction en asm sera parfaite pour le compilo : un registre. Donc bien entendu k'utiliser les pointeurs est une bonne chose..
++
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 oct. 2004 à 11:35
Ah mais je vois lintéret des pointeurs, mais ds l'exemple donné, il ny en avait pas, c tt ske je voulais dire.
Alpacha
Messages postés95Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention20 mars 2006 3 oct. 2004 à 11:34
Oui, entre autre. Mais les pointeurs sont vraiment utile et efficaces, même si cela ne saute pas aux yeux.
sur ce, bonne journée
Alp
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 3 oct. 2004 à 11:21
AlexMan> L'interet des pointeur est tout simplement de pouvoir acceder au zone mémoire et d'y modifier le contenu par l'intermédiaire d'une fonction, qui plus est, permet de faire un push de seuleument 4 octets contre 8 par exemple pour une fonction prenant en paramètres un double.
Il est sure que pour des variables utilisées localement, les pointeurs reste peu utile sauf pour l'appel a des fonctions tierces.
Voila pour ma part ou je vois l'interet des pointeurs.
Shell
Alpacha
Messages postés95Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention20 mars 2006 3 oct. 2004 à 10:40
ok je le change, merci du conseil :)
Alp
Alpacha
Messages postés95Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention20 mars 2006 3 oct. 2004 à 10:39
Mais je n'utilise pas les pointeurs que pour cette boucle ^^
le tableau tant qu'il na pas vérifié tous ces octets doit continuer à se remplir jusqu'à i(en imaginant tab[i]) tandis qu'un pointeur lorqu'il a récupéré le contenu de l'adresse mémoire il peut être traité.
Je suis d'accord que pour 10 pointeurs on ne gagne pas grand chose, mais pour des jeux etc...cela peut être bénéfique.
Enfin voila :)
a+
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 oct. 2004 à 10:37
Ah et si jpeux me permettre, remplace le titre de ta source, enleve moi ce "assez", mets un truc du genre :
"Tutorial [C/C++] : Les pointeurs"
Ca donnera vachement plus envie de le lire car on se sera sur ke ce n'est pas de la merde...
Voila
++
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 oct. 2004 à 10:34
Mais ke tu (jprefere...dsl) utilises un tableau ou un pointeur ds une boucle, comme :
for (i = 0; i < 100000; ++i) {
tab[i] = .... ou *(tab + i) = ...
}
Ce sera exactement la mm chose ! Donc je ne vois pas trop ds kel cas un pointeur est plus rapide kun tableau..
++
Alpacha
Messages postés95Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention20 mars 2006 3 oct. 2004 à 10:21
Ben d'abord merci, j'ai fait aussi bien que je pouvais :)
Ensuite oui ils sont en effet équivalent puisqu'un tableau est en fait une sorte de pointeur mais comme je l'ai dit, "justifient souvent" <<< pas tout le temps :) c'est juste que je m'en sers beaucoup plus que les tableaux pour un gain de rapidité dans tout ce qui est graphisme, vous voyez ce que je veux dire?
Voila merci pour la remarque,
++
Alp
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 oct. 2004 à 10:16
Bonjour,
Tout d'abord, bien le tut, j'ai été agréablement surpris, mais un truc me chagrine :
"De telles considérations justifient souvent l'emploi de pointeurs à la place des tableaux,
en particulier pour les opérations que l'on souhaite rapides,
comme celles sur les chaînes de caractères par exemple."
La jsuis pas trop d'accord, puis ce kun tableau et un pointeur sont, on peut dire, ekivalent :
*(tab + i) <=> tab[i] <=> i[tab]
Donc pour moi, votre remarque n'est pas trop justifié. Dans certains cas, l'utilisation des pointeurs sera benefik, mais pas ds ts..
Si je me trompe, n'hesitez pas a me le dire,
Bonne continuation
2 avril 2006 à 14:42
- un bon compilateur doit produire un code identique dans les deux cas.
- et croire que l'utilisation de pointeur ou dun index fait une différence est une grave erreur (de débutant)...
13 août 2005 à 12:51
12 oct. 2004 à 09:16
AlexMan > l'utilisation des pointeurs plutot que l'utilisation de tableaux est TRES avantageuse quand on développe sur des systèmes embarqués qui ont en majorité des processeurs largement plus lent que ceux d'un PC ou un MAC. Mais aussi les Systèmes embarqués ont beaucoup moins d'espace mémoire et les tableaux en prennent énormement.
5 oct. 2004 à 21:26
sinon on est d'accord
5 oct. 2004 à 20:47
Références et pointeurs sont strictements identiques d'un point de vue résultats et otpimisations.
La seule différence réside dans leur utilisation.
Une référence est plus simple a utiliser.
Maintenant a chacun son droit d'y trouver son profit dans l'une ou l'autre des méthodes.
Pour te simplifier la chose dit toi que référence = pointeur syntaxiquement simplifié.
Shell
3 oct. 2004 à 23:14
3 oct. 2004 à 18:53
d'abord il faut que ce soit du c, a cause des void* et du transtypage a la "c", donc les cout << n'ont rien a faire ici
int i = pi2 - pi; c'est dangeureux et non portable, en c il ne faut jamais presupposer la logique d'adressage de la machine sur laquel on travail (un decalage d'adresse peut ne pas etre negatif), la maniere la plus portable est d'utilisée le type prevu pour, ptrdiff_t defini dans le standard
il ne faut pas croire que parcourir un tableau avec un pointeur est plus performant, il vaut mieux utiliser l'operateur [] et laisser faire l'optimiseur, comme plus_plus_fab l'a dit
ca aurais ete bien aussi de parler d'autres subtilités comme le cast de l-value
3 oct. 2004 à 16:57
un algorithme en O(n+1) est equivalent à O(n), et un autre algo en O(n+100000) est equivalent à O(n).
O(n+100000) est plus lent que O(n+1) mais ils ont tout les deux la meme complexité algorithmique. Il faut voir ça lorsque n tend vers l'infini.
C'est plus clair ?
comme je le disais, de toute façon, ça reviens au meme avec un compilateur digne de ce nom.
3 oct. 2004 à 16:50
3 oct. 2004 à 16:42
Mais actuellement, tous les compilateurs traduisent les parcours de tableau à l'aide de pointeurs. Donc que tu parcours un tableau avec un pointeur ou en accedant à un élément avec p[i] (= *(p+i) ), c'est identique.
@+
3 oct. 2004 à 16:27
si p est un int*,
est-il plus rapide de faire *p que *(p + 4), ou est-ce équivalent?
Si la premiere est plus rapide, l'utilité d'un pointeur est indénialbe par rapport à un tableau lors d'un parcours.
Par curiosité, quel était le titre initial du source?
3 oct. 2004 à 15:16
3 oct. 2004 à 14:58
Voila ce ke je dirais, mais je ne suis pas sur a 100%, donc jattend la confirmation d"une personne tierce et ne dis ca ke de maniere incertaine, donc ce n'est pas a prendre en compte..
++
3 oct. 2004 à 14:48
pas forcément !
le compilateur fait ce qu'il veut ! Il y a le mot clé register pour demander à ce qu'une variable (ou pointeur) soit dans un registre, mais meme avec ça, le compilo peut tres bien ne pas tenir compte de cette recommandation, alors impossible de le garantir ...
++fab
3 oct. 2004 à 13:21
j'ai justement fait un tuto la-dessus car c'est très important et parfois bizarre à comprendre
en espérant que ca éclaire ceux pour qui cette notion est encore floue
Alp
3 oct. 2004 à 13:18
Bonne initiative parce que c'est important de bien comprendre la notion de pointeur, ca servira à pas mal de débutants à mon avis.
Je le lirai bientôt dans son intégralité et je te dirai si je trouve qqchose de bizarre, mais à prioris si AlexMAN et DeAtHCrAsH n'ont rien trouvé de particulier, j'en trouverai pas plus.
Merci à tous ceux qui prennent le temps de faire des tutos.
eRoZion
3 oct. 2004 à 12:01
Alpacha> Ecoute AlexMan et change ton exemple pour en mettre un plus paralant.
Shell
3 oct. 2004 à 11:37
ben forcément l'exemple n'est qu'un exemple pour expliquer à ceux qui ne voient pas encore bien ce que c'est à quoi ca sert, ou simplement ceux pour qui c'est flou
A+
3 oct. 2004 à 11:36
++
3 oct. 2004 à 11:35
3 oct. 2004 à 11:34
sur ce, bonne journée
Alp
3 oct. 2004 à 11:21
Il est sure que pour des variables utilisées localement, les pointeurs reste peu utile sauf pour l'appel a des fonctions tierces.
Voila pour ma part ou je vois l'interet des pointeurs.
Shell
3 oct. 2004 à 10:40
Alp
3 oct. 2004 à 10:39
le tableau tant qu'il na pas vérifié tous ces octets doit continuer à se remplir jusqu'à i(en imaginant tab[i]) tandis qu'un pointeur lorqu'il a récupéré le contenu de l'adresse mémoire il peut être traité.
Je suis d'accord que pour 10 pointeurs on ne gagne pas grand chose, mais pour des jeux etc...cela peut être bénéfique.
Enfin voila :)
a+
3 oct. 2004 à 10:37
"Tutorial [C/C++] : Les pointeurs"
Ca donnera vachement plus envie de le lire car on se sera sur ke ce n'est pas de la merde...
Voila
++
3 oct. 2004 à 10:34
for (i = 0; i < 100000; ++i) {
tab[i] = .... ou *(tab + i) = ...
}
Ce sera exactement la mm chose ! Donc je ne vois pas trop ds kel cas un pointeur est plus rapide kun tableau..
++
3 oct. 2004 à 10:21
Ensuite oui ils sont en effet équivalent puisqu'un tableau est en fait une sorte de pointeur mais comme je l'ai dit, "justifient souvent" <<< pas tout le temps :) c'est juste que je m'en sers beaucoup plus que les tableaux pour un gain de rapidité dans tout ce qui est graphisme, vous voyez ce que je veux dire?
Voila merci pour la remarque,
++
Alp
3 oct. 2004 à 10:16
Tout d'abord, bien le tut, j'ai été agréablement surpris, mais un truc me chagrine :
"De telles considérations justifient souvent l'emploi de pointeurs à la place des tableaux,
en particulier pour les opérations que l'on souhaite rapides,
comme celles sur les chaînes de caractères par exemple."
La jsuis pas trop d'accord, puis ce kun tableau et un pointeur sont, on peut dire, ekivalent :
*(tab + i) <=> tab[i] <=> i[tab]
Donc pour moi, votre remarque n'est pas trop justifié. Dans certains cas, l'utilisation des pointeurs sera benefik, mais pas ds ts..
Si je me trompe, n'hesitez pas a me le dire,
Bonne continuation
++