Re: [問題] 請問static是什麼意思...

看板C_and_CPP作者 (mystea)時間16年前 (2007/10/05 15:44), 編輯推噓7(700)
留言7則, 6人參與, 最新討論串3/5 (看更多)
電腦的記憶體在執行程式時, 會被分成三區: permanent, stack 和 heap. permanent區的變數會一直活到程式執行完, stack區的變數則是在{}執行完就被移除. C的default是把global variable都放到permanent, local variable都放到stack. 但是有時候, 你希望local variable不要那麼短命...這時候加一個修飾詞static, local variable就會被放到permanent variable裡了. default會這樣定不是全然沒有道理的. global variable既然是大家都看得到的變數, 活到程式結束是天經地義. 而local variable既然在{}外的程式都看不到他, 很自然的選 則就是在離開{}後就把他清掉, 好節省記憶體. 只是在一些非常時期, 我們不希望{}外的 程式去碰那個變數, 卻又希望他能夠用來保存有用的資訊, 這個時候就要加上static了. ※ 引述《freesamael (燒賣)》之銘言: : ※ 引述《OpenMX (材料探索者)》之銘言: : : 我又來問問題了-.- : : 近來在看個計算材料的code : : : http://staff.aist.go.jp/t-ozaki/b-bop/b-bop.html : : 裡面用了一堆 static這修飾 : : 看了一堆書 也問了人 還是搞不清處static到底是什麼意思啊.. : : 又static在科學計算上有什麼好處 以至於這作者要大量使用... : : fortran確定是沒有對應這語法的 =.= : : 煩請高手回答 謝謝!!! : 在 C/C++ 中,static 修飾詞在不同地方的意義不同。我看你附上的程式碼只有看到 : 加在 local variable 之前的,那樣的寫法稱作 static local variable。 : 如果你對 c 語言的 scope 有點基礎概念,應該知道 local variable 只在 { } 區間 : 內有效,過了就消失。也就是說,它的壽命就只有在進入區間內到離開區間前。 : 一個區間可能是一個 function,或是 if、for、while,甚至是你在 function 內任何 : 地方隨便寫一組 { } 括弧也會成為一個區間。 : Static local variable 的壽命跟 global variable 一樣長,但是只在宣告的 { } : 區間內是可視的。也就是只有在 { } 區間內可以存取,但是其值在離開區間後仍會 : 保留,且初始化行為只會有一次。 : 以下例來說,function 被執行幾次,count 就會是多少。 : void function() : { : static count = 0; // count 只有第一次會初始化成 0 : count++; : } : 你可能需要一本 c 語言的書籍當作輔助工具,不然類似的問題還會遇到很多。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 76.170.235.113

10/05 19:35, , 1F
大推!推!推!推推推!!!!!!!
10/05 19:35, 1F

10/05 21:21, , 2F
那heap呢?
10/05 21:21, 2F

10/05 21:22, , 3F
動態配置記憶體時會用到heap
10/05 21:22, 3F

10/06 00:40, , 4F
malloc()之類的function就是用heap來存取data
10/06 00:40, 4F

10/06 14:45, , 5F
Thanks
10/06 14:45, 5F

10/06 15:18, , 6F
大推好文~!
10/06 15:18, 6F

10/06 15:57, , 7F
10/06 15:57, 7F
文章代碼(AID): #171Uj3qm (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #171Uj3qm (C_and_CPP)