Re: [問題] local變數 行為
※ 引述《QQ29 (我愛阿蓉)》之銘言:
→
12/16 01:27,
12/16 01:27
→
12/16 01:27,
12/16 01:27
→
12/16 01:28,
12/16 01:28
class A
{
public:
void XD(){int x; cout << &x << endl; x++;}
};
void test(A a2){
a2.XD();
}
int main(){
A a1,a2;
a1.XD();
// a2.XD();
test(a2);
}
> g++ test.cpp // 未經最佳化
0x7fff6825a58c
0x7fff6825a57c
> g++ -O3 test.cpp
0x7fffcb5ac76c
0x7fffcb5ac76c
以下稍做解釋:
原程式 a1.XD() return 回來之後,stack 又回到原來的位置
這時候您再直接去 call a2.XD(),stack 當然又會增長到同一塊位置
至於您說的function配置好空間
那是code的部分,與您的觀念並無衝突
每個 Process 在跑的時候粗略來分都有 stack heap code static 幾塊空間
code 的部分,裡面的內容是編譯時就會寫好有哪幾條 bytecode,這就是您所說的
但是實際上在 run program 的時候
他的自動變數是長在 stack 上,這塊是動態消長的,是 OS 當下分給您的
兩個是不一樣的事情
critical section 又是另一回事
這是在 multithread 的時候
這時您的 Process 一樣會分成好幾塊空間
但是此時 stack 隨著幾個 thread 就會有幾個,而 heap static 只會有一份
所以我們要避免不同的 thread 去存取同一份 heap 或 static 空間
這跟剛剛那些又是完全不一樣的議題了 @@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.235.154
※ 編輯: nowar100 來自: 140.113.235.154 (12/16 01:43)
推
12/16 01:44, , 1F
12/16 01:44, 1F
→
12/16 01:44, , 2F
12/16 01:44, 2F
→
12/16 01:45, , 3F
12/16 01:45, 3F
→
12/16 01:46, , 4F
12/16 01:46, 4F
推
12/16 01:49, , 5F
12/16 01:49, 5F
→
12/16 01:49, , 6F
12/16 01:49, 6F
→
12/16 01:51, , 7F
12/16 01:51, 7F
→
12/16 01:51, , 8F
12/16 01:51, 8F
→
12/16 01:51, , 9F
12/16 01:51, 9F
→
12/16 01:51, , 10F
12/16 01:51, 10F
→
12/16 01:53, , 11F
12/16 01:53, 11F
→
12/16 01:53, , 12F
12/16 01:53, 12F
→
12/16 01:53, , 13F
12/16 01:53, 13F
→
12/16 01:53, , 14F
12/16 01:53, 14F
推
12/16 01:58, , 15F
12/16 01:58, 15F
→
12/16 01:59, , 16F
12/16 01:59, 16F
推
12/16 02:00, , 17F
12/16 02:00, 17F
→
12/16 03:09, , 18F
12/16 03:09, 18F
→
12/16 03:09, , 19F
12/16 03:09, 19F
→
12/16 03:10, , 20F
12/16 03:10, 20F
→
12/16 03:10, , 21F
12/16 03:10, 21F
→
12/16 03:11, , 22F
12/16 03:11, 22F
→
12/16 03:11, , 23F
12/16 03:11, 23F
推
12/16 10:34, , 24F
12/16 10:34, 24F
→
12/16 10:41, , 25F
12/16 10:41, 25F
推
12/16 14:42, , 26F
12/16 14:42, 26F
討論串 (同標題文章)