Re: [問題] multiple local variable declaration
※ 引述《singlovesong (~"~)》之銘言:
: 那temp 這個變數會被生100次出來在不同的記憶體位置嗎?
: 如果會的話compiler or OS 會幫忙先清掉原本的temp嗎?
: (否則會浪費99個int 的記憶體大小)
不要把 local 變數配置當成很複雜的東西,
與其說是allocate, 不如說只是單純的reserve一段stack來用,
像是這樣的function, 比較單純的想法是..
void fun () {
sp -= 4 alloc i
int i; i 在 sp+0
if (...) {
sp -= 4 alloc t1
int t1; t1 在 sp+0, i 在 sp+4
sp += 4 free t1
}
for (i=0; i<N; i++) {
sp -= 4 alloc t2
int t2; t2 在 sp+0, i 在 sp+4
sp += 4 free t2
}
sp += 4 free i
}
雖然有三變數, 其實只需要兩塊空間,
不斷調stack不只沒有效率, 也會讓變數的位置比較難算
像是上面的例子, 在不同的nestd scope, 有時i是sp[0]有時是sp[1]
(在很多architecture上會用 frame pointer或base pointer來幫忙)
所以真正的做法其實是
void fun () {
sp -= 8
int i; i 在 sp+4
if (...) {
int t1; t1 在 sp+0, i 在 sp+4
}
for (i=0; i<N; i++) {
int t2; t2 在 sp+0, i 在 sp+4
}
sp += 8
}
也就是說..
根本沒什麼好free的, 一return什麼都還回去了.
且同一個level的scope還會shared到一樣的空間.
不過若是C++, 就還要考慮建構/解構的overhead了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.226.108
※ 編輯: cole945 來自: 111.251.226.108 (04/30 13:18)
※ 編輯: cole945 來自: 111.251.226.108 (04/30 13:18)
推
04/30 14:18, , 1F
04/30 14:18, 1F
→
04/30 15:04, , 2F
04/30 15:04, 2F
→
04/30 15:07, , 3F
04/30 15:07, 3F
→
04/30 17:35, , 4F
04/30 17:35, 4F
→
04/30 17:35, , 5F
04/30 17:35, 5F
→
04/30 17:55, , 6F
04/30 17:55, 6F
推
04/30 17:55, , 7F
04/30 17:55, 7F
→
04/30 17:56, , 8F
04/30 17:56, 8F
→
04/30 17:57, , 9F
04/30 17:57, 9F
→
04/30 17:58, , 10F
04/30 17:58, 10F
推
04/30 21:12, , 11F
04/30 21:12, 11F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章