Q1。在Java中,所有對象,數組和類變量都存儲在堆中? C++也一樣嗎?數據段是堆的一部分嗎?Stack Frame問題:Java vs C++
以下C++代碼如何?
class MyClass{
private:
static int counter;
static int number;
};
MyClass::number = 100;
Q2。就我的理解而言,由編譯器賦予特定值的變量存儲在數據段中,而未經初始化的全局變量和靜態變量存儲在BSS(由符號開始的塊)中。在這種情況下,MyClass :: counter是靜態的,被編譯器初始化爲零,所以它被存儲在BSS中,並且被初始化爲100的MyClass :: number被存儲在數據段中。我的結論是否正確?
Q3。請考慮下面這段代碼:
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);
}
我希望我已經做了我的問題說清楚所有
編輯:
請BSS
請參閱本 article一些理解EDIT1 :將類名從MyInstance更改爲MyClass,因爲它名字很差。真誠道歉
EDIT2:改變了類的成員變量數目從非靜態靜態
調用任何時間'new',你mallocing,這意味着無論你用'new'確實保存在堆上創建。我不知道你的意思是「數據段是堆的一部分嗎?」。 – 2009-08-26 18:07:09
MyClass :: number = 100;不會編譯。你是不是指櫃檯? – 2009-08-26 18:32:52
將成員變量編號更改爲靜態 – pankajt 2009-08-26 18:34:27