看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《amozartea (單車單車)》之銘言: : 如題,這可能很少人問過 : 書上寫說區域變數其實都自動預設auto, : 在編譯過程中並不會配置一塊記憶體空間,而是在程式執行時以堆疊的方式存放, : 因此他是屬於動態的變數。 : ^^^^^^^^^^^^^^^^^^^^^^ 此段是出自洪維恩的書 通常區域變數又會稱為「自動變數」 也就是說,它會在函式進入的時候自動配置空間 並且在函式結束的時候自動回收空間 使用者並不必做什麼動作去管理記憶體 但通常不會用「動態」或「靜態」字眼形容區域變數 除非有用static修飾,才會是靜態的 但區域變數不會跟動態兩個字放在一起 : 但是又在動態記憶體章節上面寫說C++都是預設靜態什麼的 很讓人搞混 : ok 總之我目前的認知是一般的陣列是靜態宣告... : (以下都是區域變數) : int a; 跟 auto int a; 等價,而且這是動態 它們都是區域變數,而且等價沒錯 : int a[5]; 是靜態,,,應該吧? 同樣是區域變數 : 那假設我宣告如下(當然是區域): : auto int a[5]; 這到底該算靜態還是動態? 已經試過編譯可以過... 跟 int a[5]; 是等價的。如同上述,這裡並不適合用動態或靜態形容它 : 如果是靜態那不是表示auto關鍵字在這裡沒用嗎@@? : 如果是動態的話那跟 : int* a; a = new int[5];又有何不同 這種寫法稱為「動態配置空間」,其實也沒人在講「動態變數」 總之,我覺得您手邊這本書的名詞非常奇怪...XD 真好奇書上是怎麼講static變數 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 101.13.58.252
amozartea:所以應該是我被這本書搞混觀念了= = 謝謝您 01/19 15:17
diabloevagto:先推在說,我判斷動態的方式是,只要沒new就不是 01/19 15:18
tropical72:static 變數放在哪一般書應該不會探討,但我沒會錯意的 01/19 15:57
tropical72:話,static 似乎是放在 bss (自我修養 p59) 01/19 15:58
tropical72:(所以 static 不是放在 stack,也不是放在 heap) 01/19 15:59
印象中,有沒有設定初始值的static變數,會被放在不同的地方(data或bss) (?)
tropical72:這是我納悶的地方,目前 static 變數即使不給初值給自動 01/19 16:05
tropical72:以0(or NULL)當初值,有什麼static變數是不會給初值的? 01/19 16:06
tropical72:如果都會給初值的話,不就必放在 bss ? 01/19 16:07
tropical72:sorry,我想到答案了,上述錯誤不少。 01/19 16:11
tropical72:沒給初始或初值給0是放在bss,其餘給初值放在data. 01/19 16:11
實驗了一下 int main() { static int x; } text data bss dec hex filename 62 0 4 66 42 test.o int main() { static int x = 10; } text data bss dec hex filename 62 4 0 66 42 test.o int main() { static int x = 0; } text data bss dec hex filename 62 0 4 66 42 test.o
ericinttu:靜態 自動 動態 01/19 17:37
ericinttu:中間插話好像跟不到進度,算了,名詞還是用英文表示比較準 01/19 17:39
真的,寫成中文讓我覺得好混亂 ※ 編輯: james732 來自: 101.13.58.252 (01/19 17:41)
ericinttu:我再補充兩行話好了,以我自己的觀點而言, 01/19 17:42
ericinttu:靜態=>static, 自動=>不加字,動態=>用new/malloc 01/19 17:43
tinlans:從沒看過 auto 和 dynamic 放在一起討論的 +1 01/19 18:26
tinlans:static local var 存放的位置基本上和 global var 一樣。 01/19 18:28
tinlans:不然還有哪個地方給你放存活期這麼長的東西... 01/19 18:29