Q1. W Javie wszystkie obiekty, tablice i zmienne klasy są przechowywane na stercie? Czy to samo dotyczy C++? Czy segment danych jest częścią Sterty?Pytanie ramki stosu: Java vs C++
Co z następującym kodem w C++?
class MyClass{
private:
static int counter;
static int number;
};
MyClass::number = 100;
Q2. O ile mi wiadomo, zmienne, którym nadano określoną wartość przez kompilator, są przechowywane w segmencie danych, a niezainicjalizowane zmienne globalne i statyczne są przechowywane w BSS (Block started by symbol). W tym przypadku licznik MyClass :: static jest inicjalizowany do zera przez kompilator i dlatego jest przechowywany na BSS, a numer MyClass ::, który jest zainicjalizowany na 100, jest przechowywany w segmencie danych. Czy poprawny jest wniosek?
Q3. Rozważmy następujący fragment kodu:
void doHello(MyClass &localObj){
// 3.1 localObj is a reference parameter, where will this get stored in Heap or Stack?
// do something
}
void doHelloAgain(MyClass localObj){
// 3.2 localObj is a parameter, where will this get stored in Heap or Stack?
// do something
}
int main(){
MyClass *a = new MyClass(); // stored in heap
MyClass localObj;
// 3.3 Where is this stored in heap or stack?
doHello(localObj);
doHelloAgain(localObj);
}
Mam nadzieję, że dokonały moje pytania jasne dla wszystkich
EDIT:
Proszę odnieść to article jakiegoś zrozumienia na BSS
Edit1 : Zmieniono nazwę klasy z MyInstance na MyClass, ponieważ była to zła nazwa. Szczere przeprosiny
EDIT2: Zmieniono liczbę zmienna członka klasy z nie-statyczne do statycznej
każdym razem wywołać 'new', jesteś mallocing, co oznacza, że cokolwiek tworzysz z' new' rzeczywiście przechowywane na stercie. Nie mam pojęcia, co masz na myśli przez "czy segment danych jest częścią Heap?". –
MyClass :: number = 100; nie będzie się kompilować. Czy chodziło Ci o kontratak? –
zmieniono numer zmiennej elementu na statyczny – pankajt