OVH Cloud OVH Cloud

efficacité d'une var. ou d'un attribut

14 réponses
Avatar
Chat
Bonjour,
je me pose une question qu'est ce qui est le + interressant de faire en
termes d'occupation memoire.
Si j'ai une fonction qui utilise une var locale, cette fonction-membre
est appellée assez frequemment, ne vaut mieux t'il pas mettre cette var
locale en attribut???
est ce que ça apporte quelque chose de grapiller de l'espace memoire en
termes de vitesse d'execution de cette fonction??
merci

4 réponses

1 2
Avatar
Matthieu Moy
Pierre Maurette writes:

Tiens, y'avait aussi celui-là. Je préfère mettre un return, dans tous
les cas mais surtout quand main() renvoie "légalement" un int. Mais
peu importe...
Celui qui me génait, c'est celui de f() dans:


Oups ! Au passage, ça explique pourquoi l'optimiseur arrivait à faire
du code aussi rapide ...

--
Matthieu

Avatar
kanze
Pierre Maurette wrote in message
news:...
Fabien LE LEZ typa:

On Thu, 15 Apr 2004 15:00:53 +0200, Pierre Maurette
wrote:

int main() {


Pas de return ?


Non, le return dans main() est implicite.


Tiens, y'avait aussi celui-là. Je préfère mettre un return, dans tous
les cas mais surtout quand main() renvoie "légalement" un int.


Main renvoie toujours légalement un int. (Quand il retourne. On peut
très bien concevoir des programmes où main ne retourne jamais.) Et moi
aussi, je le trouve de très mauvais style de l'omettre.

Mais > peu importe...

Celui qui me génait, c'est celui de f() dans:


À toi aussi:-).

<code>
struct A {
int f(int y) {
int x; // On peut le mettre en attribut pour comparer.
x = y + 1;
x = x * x;
x = x + y;
}
};
</code>

La norme ($6.6.3) parle clairement d'un "undefined behavior in a
value-returning function".
C'est même plus grave que ce à quoi je m'attendais (une undefined
valeur de retour).


La norme prévoit le cas général, où la valeur de retour pourrait aussi
avoir un type avec un destructeur ou des constructeurs non
triviaux. Elle prévoit aussi des implémentations sur des architectures
« bizarre », où peut-être il faut allouer de l'espace pour la valeur de
retour (même int) d'une façon particulière. Sur une implémentation
courante, sur une architecture habituelle, la seule chose que tu
risques, c'est effectivement une valeur indéfinie. Pour un int -- pour
d'autres types, tu pourrais bien avoir des comportements particuliers
(core dump, etc.).

En revanche, ce qui se passe ici, c'est que le code n'utilise jamais la
valeur calculée dans x. Et que c'est rélativement facile au compilateur
de le detecter, et de supprimer complétement tout le contenu de la
fonction. Ce qui pourrait expliquer pourquoi la version optimisée est
tellement plus rapide que la version non optimisée.

En fait, si la fonction retourne dans un registre, pas trop de
problème. Le "undefined behavior" concerne peut-être les cas où la
fonction retournerait dans la pile -> déséquilibre d'icelle.


Tout à fait.

Chez moi, deux compilateurs sur trois acceptent le code.


Pourquoi pas ? C'est légal, à condition de ne jamais appeler la
fonction.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




Avatar
Alexandre
"Hamiral" a écrit dans le message de
news:

<snip>

est ce que ça apporte quelque chose de grapiller de l'espace memoire
en




termes de vitesse d'execution de cette fonction??
Du dérisoire, je suppose. Opinion personnelle déjà donnée, coder selon

la sémantique et laisser popol optimiser.


surtout que <mode citation on> Une optimisation précose est la source de
tous les mots <mode citation off>


<mode capello on> maux, pas mots<mode capello off>

désolé :)

--
Hamiral


oopss.... mille excuses à tous, et principalement à Maitre Capello Himself
;-)
quand je pense que je passe une partie de mes cours à râler après mes
étudiants à cause de leurs fautes d'orthographe... J'espère qu'ils ne
fréquentent pas ce forum ;-)




Avatar
Fabien LE LEZ
On Fri, 16 Apr 2004 19:42:12 +0200, "Alexandre"
wrote:

surtout que <mode citation on> Une optimisation précose est la source de
tous les mots <mode citation off>



oopss.... mille excuses à tous, et principalement à Maitre Capello Himself


Tu me déçois, là. T'aurais quand même pu trouver une pirouette pour
t'en sortir, au lieu de bêtement avouer que tu as fait une faute
d'orthographe...

--
;-)
FLL, Epagneul Breton



1 2