Qu'est-ce que cela veut dire quand il dit: «l'allocation objet en ligne sur la pile?allocation d'objets en ligne sur la pile
En particulier, la « ligne » bit
Qu'est-ce que cela veut dire quand il dit: «l'allocation objet en ligne sur la pile?allocation d'objets en ligne sur la pile
En particulier, la « ligne » bit
Cela signifie que toutes les données de l'objet est alloué sur la pile, et sera sauté lorsque le procédé actuel se termine. L'alternative (qui se produit en C# et Java, ou si vous utilisez un pointeur en C++) est d'avoir une référence ou un pointeur sur la pile, qui fait référence aux données d'objet qui sont allouées sur le tas.
Je pense que la « ligne » ici signifie simplement « dans le cadre du cadre de pile pour cette méthode » par opposition à partir de la méthode existante séparément.
Eh bien, vous savez ce que la pile est, non? Si vous déclarez une fonction, par exemple, C:
int foo() {
int bar = 42;
return bar;
}
Lorsque la fonction est appelée, un espace est créé pour obtenir des informations sur la fonction sur la pile, et l'entier bar
est attribué aussi. Lorsque la fonction revient, tout ce qui est dans cette pile est désalloué.
Maintenant, en C++:
class A {
int a;
int b;
A(int x, int y) {
a = x;
b = y;
}
~A() { // destructor
cout << "A(" << a << "," << b << ") being deleted!" << endl;
}
}
void foo() {
A on_the_stack(1,2);
A *on_the_heap = new A(3,4);
}
Dans les langues comme Java, sont attribués tous les objets sur le tas (à moins que le compilateur ne une sorte d'optimisation). Mais dans certaines langues comme C++, les objets de classe peuvent aller directement sur la pile, tout comme int
s ou float
s. La mémoire du tas n'est pas utilisée sauf si vous appelez explicitement new
. Notez que notre objet on_the_heap
ne se désalloue jamais (en appelant le delete
), ce qui provoque une fuite de mémoire. Par contre, l'objet on_the_stack
est automatiquement désaffecté lorsque la fonction retourne, et son destructeur sera appelé avant de le faire.
quel est le contexte de la phrase? – nus