bonjour,
j'ai fait une hiérarchie de classes et par habitude j'ai déclaré des
méthodes virtuelles inline.
A la réflexion, je me demande si c'est stupide. Mon compilo ne dit rien mais
les méthodes étant déclarées virtuelles (et elles le sont dans la pratique),
je vois mal comment elles pourraient être inline.
Quel est votre avis ?
Marc
int main() { A * a = new B; a->Test(); // inline ignoré
Ici, le compilo peut être assez intelligent pour voir que a est de type B et inliner la fonction, non ?
Ça dépend du compilateur.
Ca me parait de toutes façons assez difficile pour que les compilos qui y arrivent soient suffisamment avancés pour ne pas tenir compte de l'indicateur "inline"...
Je ne sais pas. À l'exception de g++, tous les compilateurs que je connais utilisent les données du profileur pour diriger l'optimisation. Dans certains cas, par exemple, il leur arrive (aux meilleurs, s'entend -- c'est encore loin d'être monnaie courante) de remplacer l'appel virtuel par un if, si plus 99% des fois, on appelle la même fonction, et puis générer le cas le plus fréquent inline.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Vincent Lascaux wrote:
int main()
{
A * a = new B;
a->Test(); // inline ignoré
Ici, le compilo peut être assez intelligent pour voir que a
est de type B et inliner la fonction, non ?
Ça dépend du compilateur.
Ca me parait de toutes façons assez difficile pour que les
compilos qui y arrivent soient suffisamment avancés pour ne
pas tenir compte de l'indicateur "inline"...
Je ne sais pas. À l'exception de g++, tous les compilateurs que
je connais utilisent les données du profileur pour diriger
l'optimisation. Dans certains cas, par exemple, il leur arrive
(aux meilleurs, s'entend -- c'est encore loin d'être monnaie
courante) de remplacer l'appel virtuel par un if, si plus 99%
des fois, on appelle la même fonction, et puis générer le cas le
plus fréquent inline.
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
int main() { A * a = new B; a->Test(); // inline ignoré
Ici, le compilo peut être assez intelligent pour voir que a est de type B et inliner la fonction, non ?
Ça dépend du compilateur.
Ca me parait de toutes façons assez difficile pour que les compilos qui y arrivent soient suffisamment avancés pour ne pas tenir compte de l'indicateur "inline"...
Je ne sais pas. À l'exception de g++, tous les compilateurs que je connais utilisent les données du profileur pour diriger l'optimisation. Dans certains cas, par exemple, il leur arrive (aux meilleurs, s'entend -- c'est encore loin d'être monnaie courante) de remplacer l'appel virtuel par un if, si plus 99% des fois, on appelle la même fonction, et puis générer le cas le plus fréquent inline.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Gabriel Dos Reis
James Kanze writes:
| Vincent Lascaux wrote: | >> int main() | >> { | >> A * a = new B; | >> a->Test(); // inline ignoré | | > Ici, le compilo peut être assez intelligent pour voir que a | > est de type B et inliner la fonction, non ? | | Ça dépend du compilateur. | | > Ca me parait de toutes façons assez difficile pour que les | > compilos qui y arrivent soient suffisamment avancés pour ne | > pas tenir compte de l'indicateur "inline"... | | Je ne sais pas. À l'exception de g++, tous les compilateurs que | je connais utilisent les données du profileur pour diriger | l'optimisation.
Peut-être que tu ne connais pas g++, non plus. Finalement.
-- Gaby
James Kanze <kanze@none> writes:
| Vincent Lascaux wrote:
| >> int main()
| >> {
| >> A * a = new B;
| >> a->Test(); // inline ignoré
|
| > Ici, le compilo peut être assez intelligent pour voir que a
| > est de type B et inliner la fonction, non ?
|
| Ça dépend du compilateur.
|
| > Ca me parait de toutes façons assez difficile pour que les
| > compilos qui y arrivent soient suffisamment avancés pour ne
| > pas tenir compte de l'indicateur "inline"...
|
| Je ne sais pas. À l'exception de g++, tous les compilateurs que
| je connais utilisent les données du profileur pour diriger
| l'optimisation.
Peut-être que tu ne connais pas g++, non plus. Finalement.
| Vincent Lascaux wrote: | >> int main() | >> { | >> A * a = new B; | >> a->Test(); // inline ignoré | | > Ici, le compilo peut être assez intelligent pour voir que a | > est de type B et inliner la fonction, non ? | | Ça dépend du compilateur. | | > Ca me parait de toutes façons assez difficile pour que les | > compilos qui y arrivent soient suffisamment avancés pour ne | > pas tenir compte de l'indicateur "inline"... | | Je ne sais pas. À l'exception de g++, tous les compilateurs que | je connais utilisent les données du profileur pour diriger | l'optimisation.
Peut-être que tu ne connais pas g++, non plus. Finalement.
-- Gaby
Loïc Joly
Bonjour,
j'ai fait une hiérarchie de classes et par habitude j'ai déclaré des méthodes virtuelles inline.
Tu as mis le mot-clé "inline", ce qui donne une indication au compilateur, rien de plus. Le compilateur a le droit de mettre une fonction inline de son propre chef, tout comme il a le droit d'ignorer le mot "inline".
C'est vrai que le compilateur peut l'ignorer mais dans ce cas,la taille du code augmentera puisque chaque unité de traduction aura sa propre copie statique de la fonction.Il vaut donc mieux faire attention à l'utilisation de inline.
Dans certains cas, avoir le code de la fonction dupliqué peut aussi être une économie de taille non négligeable...
-- Loïc
Bonjour,
j'ai fait une hiérarchie de classes et par habitude j'ai déclaré des
méthodes virtuelles inline.
Tu as mis le mot-clé "inline", ce qui donne une indication au
compilateur, rien de plus.
Le compilateur a le droit de mettre une fonction inline de son propre
chef, tout comme il a le droit d'ignorer le mot "inline".
C'est vrai que le compilateur peut l'ignorer mais dans ce cas,la taille du
code augmentera puisque chaque unité de traduction
aura sa propre copie statique de la fonction.Il vaut donc mieux faire
attention à l'utilisation de inline.
Dans certains cas, avoir le code de la fonction dupliqué peut aussi être
une économie de taille non négligeable...
j'ai fait une hiérarchie de classes et par habitude j'ai déclaré des méthodes virtuelles inline.
Tu as mis le mot-clé "inline", ce qui donne une indication au compilateur, rien de plus. Le compilateur a le droit de mettre une fonction inline de son propre chef, tout comme il a le droit d'ignorer le mot "inline".
C'est vrai que le compilateur peut l'ignorer mais dans ce cas,la taille du code augmentera puisque chaque unité de traduction aura sa propre copie statique de la fonction.Il vaut donc mieux faire attention à l'utilisation de inline.
Dans certains cas, avoir le code de la fonction dupliqué peut aussi être une économie de taille non négligeable...
-- Loïc
kanze
Gabriel Dos Reis wrote:
James Kanze writes:
| Vincent Lascaux wrote: | >> int main() | >> { | >> A * a = new B; | >> a->Test(); // inline ignoré
| > Ici, le compilo peut être assez intelligent pour voir que | > a est de type B et inliner la fonction, non ?
| Ça dépend du compilateur.
| > Ca me parait de toutes façons assez difficile pour que | > les compilos qui y arrivent soient suffisamment avancés | > pour ne pas tenir compte de l'indicateur "inline"...
| Je ne sais pas. À l'exception de g++, tous les compilateurs | que je connais utilisent les données du profileur pour | diriger l'optimisation.
Peut-être que tu ne connais pas g++, non plus. Finalement.
Peut-être:-). Je sais qu'on y travaillait aussi, mais je ne connaissais pas l'état d'avancement. Mais maintenant que tu le dises, je crois effectivement avoir vu quelque chose dans cette direction dans une des versions les plus récentes. Je cherchais d'autre chose à l'instant ; je n'ai donc pas régardé en détail. Mais j'aurais dû m'en souvenir, à la place de sortir ma phrase tout faite qui correspond en fait à une réalité d'il y a un an ou deux. Mes excuses à l'équipe g++.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Gabriel Dos Reis wrote:
James Kanze <kanze@none> writes:
| Vincent Lascaux wrote:
| >> int main()
| >> {
| >> A * a = new B;
| >> a->Test(); // inline ignoré
| > Ici, le compilo peut être assez intelligent pour voir que
| > a est de type B et inliner la fonction, non ?
| Ça dépend du compilateur.
| > Ca me parait de toutes façons assez difficile pour que
| > les compilos qui y arrivent soient suffisamment avancés
| > pour ne pas tenir compte de l'indicateur "inline"...
| Je ne sais pas. À l'exception de g++, tous les compilateurs
| que je connais utilisent les données du profileur pour
| diriger l'optimisation.
Peut-être que tu ne connais pas g++, non plus. Finalement.
Peut-être:-). Je sais qu'on y travaillait aussi, mais je ne
connaissais pas l'état d'avancement. Mais maintenant que tu le
dises, je crois effectivement avoir vu quelque chose dans cette
direction dans une des versions les plus récentes. Je cherchais
d'autre chose à l'instant ; je n'ai donc pas régardé en détail.
Mais j'aurais dû m'en souvenir, à la place de sortir ma phrase
tout faite qui correspond en fait à une réalité d'il y a un an
ou deux. Mes excuses à l'équipe g++.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
| Vincent Lascaux wrote: | >> int main() | >> { | >> A * a = new B; | >> a->Test(); // inline ignoré
| > Ici, le compilo peut être assez intelligent pour voir que | > a est de type B et inliner la fonction, non ?
| Ça dépend du compilateur.
| > Ca me parait de toutes façons assez difficile pour que | > les compilos qui y arrivent soient suffisamment avancés | > pour ne pas tenir compte de l'indicateur "inline"...
| Je ne sais pas. À l'exception de g++, tous les compilateurs | que je connais utilisent les données du profileur pour | diriger l'optimisation.
Peut-être que tu ne connais pas g++, non plus. Finalement.
Peut-être:-). Je sais qu'on y travaillait aussi, mais je ne connaissais pas l'état d'avancement. Mais maintenant que tu le dises, je crois effectivement avoir vu quelque chose dans cette direction dans une des versions les plus récentes. Je cherchais d'autre chose à l'instant ; je n'ai donc pas régardé en détail. Mais j'aurais dû m'en souvenir, à la place de sortir ma phrase tout faite qui correspond en fait à une réalité d'il y a un an ou deux. Mes excuses à l'équipe g++.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Gabriel Dos Reis
writes:
| Gabriel Dos Reis wrote: | > James Kanze writes: | | > | Vincent Lascaux wrote: | > | >> int main() | > | >> { | > | >> A * a = new B; | > | >> a->Test(); // inline ignoré | | > | > Ici, le compilo peut être assez intelligent pour voir que | > | > a est de type B et inliner la fonction, non ? | | > | Ça dépend du compilateur. | | > | > Ca me parait de toutes façons assez difficile pour que | > | > les compilos qui y arrivent soient suffisamment avancés | > | > pour ne pas tenir compte de l'indicateur "inline"... | | > | Je ne sais pas. À l'exception de g++, tous les compilateurs | > | que je connais utilisent les données du profileur pour | > | diriger l'optimisation. | | > Peut-être que tu ne connais pas g++, non plus. Finalement. | | Peut-être:-). Je sais qu'on y travaillait aussi, mais je ne | connaissais pas l'état d'avancement. Mais maintenant que tu le | dises, je crois effectivement avoir vu quelque chose dans cette | direction dans une des versions les plus récentes. Je cherchais | d'autre chose à l'instant ; je n'ai donc pas régardé en détail. | Mais j'aurais dû m'en souvenir, à la place de sortir ma phrase | tout faite qui correspond en fait à une réalité d'il y a un an | ou deux. Mes excuses à l'équipe g++.
Cette annonce a été faite le 29 août 2001
http://gcc.gnu.org/news/profiledriven.html
-- Gaby
kanze@gabi-soft.fr writes:
| Gabriel Dos Reis wrote:
| > James Kanze <kanze@none> writes:
|
| > | Vincent Lascaux wrote:
| > | >> int main()
| > | >> {
| > | >> A * a = new B;
| > | >> a->Test(); // inline ignoré
|
| > | > Ici, le compilo peut être assez intelligent pour voir que
| > | > a est de type B et inliner la fonction, non ?
|
| > | Ça dépend du compilateur.
|
| > | > Ca me parait de toutes façons assez difficile pour que
| > | > les compilos qui y arrivent soient suffisamment avancés
| > | > pour ne pas tenir compte de l'indicateur "inline"...
|
| > | Je ne sais pas. À l'exception de g++, tous les compilateurs
| > | que je connais utilisent les données du profileur pour
| > | diriger l'optimisation.
|
| > Peut-être que tu ne connais pas g++, non plus. Finalement.
|
| Peut-être:-). Je sais qu'on y travaillait aussi, mais je ne
| connaissais pas l'état d'avancement. Mais maintenant que tu le
| dises, je crois effectivement avoir vu quelque chose dans cette
| direction dans une des versions les plus récentes. Je cherchais
| d'autre chose à l'instant ; je n'ai donc pas régardé en détail.
| Mais j'aurais dû m'en souvenir, à la place de sortir ma phrase
| tout faite qui correspond en fait à une réalité d'il y a un an
| ou deux. Mes excuses à l'équipe g++.
| Gabriel Dos Reis wrote: | > James Kanze writes: | | > | Vincent Lascaux wrote: | > | >> int main() | > | >> { | > | >> A * a = new B; | > | >> a->Test(); // inline ignoré | | > | > Ici, le compilo peut être assez intelligent pour voir que | > | > a est de type B et inliner la fonction, non ? | | > | Ça dépend du compilateur. | | > | > Ca me parait de toutes façons assez difficile pour que | > | > les compilos qui y arrivent soient suffisamment avancés | > | > pour ne pas tenir compte de l'indicateur "inline"... | | > | Je ne sais pas. À l'exception de g++, tous les compilateurs | > | que je connais utilisent les données du profileur pour | > | diriger l'optimisation. | | > Peut-être que tu ne connais pas g++, non plus. Finalement. | | Peut-être:-). Je sais qu'on y travaillait aussi, mais je ne | connaissais pas l'état d'avancement. Mais maintenant que tu le | dises, je crois effectivement avoir vu quelque chose dans cette | direction dans une des versions les plus récentes. Je cherchais | d'autre chose à l'instant ; je n'ai donc pas régardé en détail. | Mais j'aurais dû m'en souvenir, à la place de sortir ma phrase | tout faite qui correspond en fait à une réalité d'il y a un an | ou deux. Mes excuses à l'équipe g++.