OVH Cloud OVH Cloud

méthode inline virtuelle

15 réponses
Avatar
MGN
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

5 réponses

1 2
Avatar
James Kanze
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:
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


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



Avatar
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

Avatar
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
1 2