Juste pour etre certain d'avoir bien compris la chose, dans
le cas de l'exemple ci-dessous tout se passe comme si sommet()
passait un pointeur sur la pile, et qu'on déréférançait à
l'arrivée pour initialiser p !?
En clair : qu'est-ce qui passe sur la pile : un Point ou une adresse ?
-----------------------
class A{
Point _p;
[..]
Point& sommet() {return(_p);};
}
[..]
A a;
[..]
Point p;
p = a.sommet();
------------------------
Juste pour etre certain d'avoir bien compris la chose, dans
le cas de l'exemple ci-dessous tout se passe comme si sommet()
passait un pointeur sur la pile, et qu'on déréférançait à
l'arrivée pour initialiser p !?
En clair : qu'est-ce qui passe sur la pile : un Point ou une adresse ?
-----------------------
class A{
Point _p;
[..]
Point& sommet() {return(_p);};
}
[..]
A a;
[..]
Point p;
p = a.sommet();
------------------------
Juste pour etre certain d'avoir bien compris la chose, dans
le cas de l'exemple ci-dessous tout se passe comme si sommet()
passait un pointeur sur la pile, et qu'on déréférançait à
l'arrivée pour initialiser p !?
En clair : qu'est-ce qui passe sur la pile : un Point ou une adresse ?
-----------------------
class A{
Point _p;
[..]
Point& sommet() {return(_p);};
}
[..]
A a;
[..]
Point p;
p = a.sommet();
------------------------
Je ne comprends pas trop la question.
J'ai conscience de n'etre pas très clair, c'est en partie du a mon
Quand on parle de la pile,
on parle habituellement des variables locales et des
temporaires.
Ma connaissance en ce domaine est très limitée, mais il me semble me
Typiquement aussi, une référence s'implémente comme
un pointeur, dans les cas où le compilateur ne réussit pas à
l'éliminer complétement.
Dans ce cas, je supposes que tout se passe plus ou moins comme si
[..]
A a;
En supposant que tu es dans une fonction, ici `a' se trouvera
sur la pile. En dehors d'une fonction, il se trouvera dans la
mémoire statique.
Oui, autant pour moi, j'aurais du préciser que je plaçais la partie
p = a.sommet();
[..]
Enfin, le compilateur génèrera du code pour appeler l'opérateur
d'affectation de Point, avec l'adresse de p comme premier
paramètre, et la valeur renvoyée de l'appel de sommet comme
deuxième paramètre. Ici aussi, où il met les paramètres dépend
de l'API en question.
[..]
Je ne comprends pas trop la question.
J'ai conscience de n'etre pas très clair, c'est en partie du a mon
Quand on parle de la pile,
on parle habituellement des variables locales et des
temporaires.
Ma connaissance en ce domaine est très limitée, mais il me semble me
Typiquement aussi, une référence s'implémente comme
un pointeur, dans les cas où le compilateur ne réussit pas à
l'éliminer complétement.
Dans ce cas, je supposes que tout se passe plus ou moins comme si
[..]
A a;
En supposant que tu es dans une fonction, ici `a' se trouvera
sur la pile. En dehors d'une fonction, il se trouvera dans la
mémoire statique.
Oui, autant pour moi, j'aurais du préciser que je plaçais la partie
p = a.sommet();
[..]
Enfin, le compilateur génèrera du code pour appeler l'opérateur
d'affectation de Point, avec l'adresse de p comme premier
paramètre, et la valeur renvoyée de l'appel de sommet comme
deuxième paramètre. Ici aussi, où il met les paramètres dépend
de l'API en question.
[..]
Je ne comprends pas trop la question.
J'ai conscience de n'etre pas très clair, c'est en partie du a mon
Quand on parle de la pile,
on parle habituellement des variables locales et des
temporaires.
Ma connaissance en ce domaine est très limitée, mais il me semble me
Typiquement aussi, une référence s'implémente comme
un pointeur, dans les cas où le compilateur ne réussit pas à
l'éliminer complétement.
Dans ce cas, je supposes que tout se passe plus ou moins comme si
[..]
A a;
En supposant que tu es dans une fonction, ici `a' se trouvera
sur la pile. En dehors d'une fonction, il se trouvera dans la
mémoire statique.
Oui, autant pour moi, j'aurais du préciser que je plaçais la partie
p = a.sommet();
[..]
Enfin, le compilateur génèrera du code pour appeler l'opérateur
d'affectation de Point, avec l'adresse de p comme premier
paramètre, et la valeur renvoyée de l'appel de sommet comme
deuxième paramètre. Ici aussi, où il met les paramètres dépend
de l'API en question.
[..]
Je ne comprends pas trop la question.
J'ai conscience de n'etre pas très clair, c'est en partie du a
mon inexpérience dans le domaine. je vais essayer de faire
mieux.
Quand on parle de la pile, on parle habituellement des
variables locales et des temporaires.
Ma connaissance en ce domaine est très limitée, mais il me
semble me souvenir que la pile est cette partie de la mémoire
sur laquelle on empile et on dépile les variables au grès de
leur portée... En particulier, on entasse en strate le
contexte des fonctions appelantes, et lors du retour d'une
fonction, en gros (et certainement aussi un peu en faux), on
dépile tout le contexte de ladite fonction et on empile son
résultat. Méthode par laquelle la fonction appelante reçoit le
résultat.
Et donc, si j'ai bien tout compris à ce qu'on m'a enseigné,
une des raisons pour utiliser des pointeurs plutot que des
objets comme valeur de retour, c'est qu'au lieu de copier tout
l'objet sur la pile, on en copie que l'adresse...
La question que je me posais était de savoir ce qu'il se
passait dans le cas d'une référence au lieu d'un pointeur
comme valeur de retour d'une fonction.
Typiquement aussi, une référence s'implémente comme un
pointeur, dans les cas où le compilateur ne réussit pas à
l'éliminer complétement.
Dans ce cas, je supposes que tout se passe plus ou moins comme
si j'avais écrit:
Point* sommet() {return(&_p)}
puis dans mon programme :
point *pp=a.sommet();
[..]
A a;
En supposant que tu es dans une fonction, ici `a' se
trouvera sur la pile. En dehors d'une fonction, il se
trouvera dans la mémoire statique.
Oui, autant pour moi, j'aurais du préciser que je plaçais la
partie du code non incluse dans la classe dans un bloc
main(){}...p = a.sommet();
[..]Enfin, le compilateur génèrera du code pour appeler
l'opérateur d'affectation de Point, avec l'adresse de p
comme premier paramètre, et la valeur renvoyée de l'appel de
sommet comme deuxième paramètre. Ici aussi, où il met les
paramètres dépend de l'API en question.
[..]
Si je vous comprend bien, le compilateur fait une différence
entre les valeurs de retour de type pointeur -remisées dans un
registre- et les autres : posées sur la pile ?
Je ne comprends pas trop la question.
J'ai conscience de n'etre pas très clair, c'est en partie du a
mon inexpérience dans le domaine. je vais essayer de faire
mieux.
Quand on parle de la pile, on parle habituellement des
variables locales et des temporaires.
Ma connaissance en ce domaine est très limitée, mais il me
semble me souvenir que la pile est cette partie de la mémoire
sur laquelle on empile et on dépile les variables au grès de
leur portée... En particulier, on entasse en strate le
contexte des fonctions appelantes, et lors du retour d'une
fonction, en gros (et certainement aussi un peu en faux), on
dépile tout le contexte de ladite fonction et on empile son
résultat. Méthode par laquelle la fonction appelante reçoit le
résultat.
Et donc, si j'ai bien tout compris à ce qu'on m'a enseigné,
une des raisons pour utiliser des pointeurs plutot que des
objets comme valeur de retour, c'est qu'au lieu de copier tout
l'objet sur la pile, on en copie que l'adresse...
La question que je me posais était de savoir ce qu'il se
passait dans le cas d'une référence au lieu d'un pointeur
comme valeur de retour d'une fonction.
Typiquement aussi, une référence s'implémente comme un
pointeur, dans les cas où le compilateur ne réussit pas à
l'éliminer complétement.
Dans ce cas, je supposes que tout se passe plus ou moins comme
si j'avais écrit:
Point* sommet() {return(&_p)}
puis dans mon programme :
point *pp=a.sommet();
[..]
A a;
En supposant que tu es dans une fonction, ici `a' se
trouvera sur la pile. En dehors d'une fonction, il se
trouvera dans la mémoire statique.
Oui, autant pour moi, j'aurais du préciser que je plaçais la
partie du code non incluse dans la classe dans un bloc
main(){}...
p = a.sommet();
[..]
Enfin, le compilateur génèrera du code pour appeler
l'opérateur d'affectation de Point, avec l'adresse de p
comme premier paramètre, et la valeur renvoyée de l'appel de
sommet comme deuxième paramètre. Ici aussi, où il met les
paramètres dépend de l'API en question.
[..]
Si je vous comprend bien, le compilateur fait une différence
entre les valeurs de retour de type pointeur -remisées dans un
registre- et les autres : posées sur la pile ?
Je ne comprends pas trop la question.
J'ai conscience de n'etre pas très clair, c'est en partie du a
mon inexpérience dans le domaine. je vais essayer de faire
mieux.
Quand on parle de la pile, on parle habituellement des
variables locales et des temporaires.
Ma connaissance en ce domaine est très limitée, mais il me
semble me souvenir que la pile est cette partie de la mémoire
sur laquelle on empile et on dépile les variables au grès de
leur portée... En particulier, on entasse en strate le
contexte des fonctions appelantes, et lors du retour d'une
fonction, en gros (et certainement aussi un peu en faux), on
dépile tout le contexte de ladite fonction et on empile son
résultat. Méthode par laquelle la fonction appelante reçoit le
résultat.
Et donc, si j'ai bien tout compris à ce qu'on m'a enseigné,
une des raisons pour utiliser des pointeurs plutot que des
objets comme valeur de retour, c'est qu'au lieu de copier tout
l'objet sur la pile, on en copie que l'adresse...
La question que je me posais était de savoir ce qu'il se
passait dans le cas d'une référence au lieu d'un pointeur
comme valeur de retour d'une fonction.
Typiquement aussi, une référence s'implémente comme un
pointeur, dans les cas où le compilateur ne réussit pas à
l'éliminer complétement.
Dans ce cas, je supposes que tout se passe plus ou moins comme
si j'avais écrit:
Point* sommet() {return(&_p)}
puis dans mon programme :
point *pp=a.sommet();
[..]
A a;
En supposant que tu es dans une fonction, ici `a' se
trouvera sur la pile. En dehors d'une fonction, il se
trouvera dans la mémoire statique.
Oui, autant pour moi, j'aurais du préciser que je plaçais la
partie du code non incluse dans la classe dans un bloc
main(){}...p = a.sommet();
[..]Enfin, le compilateur génèrera du code pour appeler
l'opérateur d'affectation de Point, avec l'adresse de p
comme premier paramètre, et la valeur renvoyée de l'appel de
sommet comme deuxième paramètre. Ici aussi, où il met les
paramètres dépend de l'API en question.
[..]
Si je vous comprend bien, le compilateur fait une différence
entre les valeurs de retour de type pointeur -remisées dans un
registre- et les autres : posées sur la pile ?