Non so nulla di smalltalk, quindi parlerò solo di C ++.
In C ++ (e AFAIK in Java e C #), ogni thread ha il proprio stack. Se non sai cos'è un thread, ti suggerisco di leggerlo. Lo descriverò qui come l'autobus su cui sta andando il tuo codice. Ma ti suggerisco di imparare più di questa orribile analogia (Inoltre, non tutti i runtime sono multithread, quindi potrebbe esserci solo un thread, ma probabilmente non ne tratterai).
Se dichiari qualcosa all'interno di una funzione come questa:
void foo() {
MyObject a;
}
Quindi la nuova istanza MyObject è presente nello stack. Se hai 2 oggetti:
void foo() {
MyObject a;
MyOtherObject b;
}
Entrambi vivono nello stack (lo stesso stack). Se si utilizza new / malloc / HeapAlloc / qualunque altra routine di allocazione dell'heap della propria piattaforma:
void foo() {
MyObject* a = new MyObject();
}
Quindi la nuova istanza dell'oggetto viene allocata nell'heap, che è una cosa diversa, che non descriverò poiché probabilmente è fuori ambito.
In breve, la risposta è no. Ogni oggetto non ha il proprio stack.