En essayant d'apprendre lvalues
, rvalues
et l'allocation de mémoire pour eux. Donc, avec beaucoup de matériel d'apprentissage, il y a un peu de chaos.Comment les valeurs de C++ sont-elles stockées en mémoire?
Une valeur rvalue
est une valeur qui doit exister uniquement dans les limites d'une expression où elle a été créée (jusqu'au moins C++ 11). Il a donc une adresse et un bloc de mémoire qu'il occupe. Mais par définition, nous ne pouvons pas obtenir une adresse de rvalue
, parce que c'est un objet temporaire contrairement à lvalue
. Mais même avant C++ 11 nous pouvions obtenir une adresse de rvalue
en la renvoyant d'une fonction et en l'enregistrant dans un type de référence const (euh, je suppose pas une adresse mais une valeur).
Donc, plus précisément, comment fonctionne l'allocation rvalue
? Pendant combien de temps le programme ou le système d'exploitation se souvient-il vraiment de cet endroit de mémoire où le rvalue
a été créé et marqué comme affecté et un autre objet ne peut pas prendre sa place? Comment je le vois, maintenant rvalues
sont stockés comme lvalues
mais nous avons simplement d'autres droits d'accès. Et ils ont d'autres types de désallocation - pour lvalues
hors de portée, pour rvalues
peut être optimisé par existence dans les limites de l'expression ou jusqu'à ce qu'il n'y ait plus de liens vers elle.
Ils n'utilisent aucun stockage. Qu'est-ce que l'utilisation du stockage est * objets *. (et parfois, des références). Vous semblez écrire "rvalue" alors qu'en fait vous voulez dire "objet temporaire". –
Je ne pense pas que les valeurs doivent avoir une adresse du tout. Ils peuvent simplement être évalués dans des registres. –
@ M.M, vous avez raison. –