Re: [問題] auto宣告的記憶體問題
※ 引述《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
推
01/19 15:17, , 1F
01/19 15:17, 1F
推
01/19 15:18, , 2F
01/19 15:18, 2F
→
01/19 15:57, , 3F
01/19 15:57, 3F
→
01/19 15:58, , 4F
01/19 15:58, 4F
→
01/19 15:59, , 5F
01/19 15:59, 5F
印象中,有沒有設定初始值的static變數,會被放在不同的地方(data或bss) (?)
推
01/19 16:05, , 6F
01/19 16:05, 6F
→
01/19 16:06, , 7F
01/19 16:06, 7F
→
01/19 16:07, , 8F
01/19 16:07, 8F
→
01/19 16:11, , 9F
01/19 16:11, 9F
→
01/19 16:11, , 10F
01/19 16:11, 10F
實驗了一下
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
→
01/19 17:37, , 11F
01/19 17:37, 11F
→
01/19 17:39, , 12F
01/19 17:39, 12F
真的,寫成中文讓我覺得好混亂
※ 編輯: james732 來自: 101.13.58.252 (01/19 17:41)
→
01/19 17:42, , 13F
01/19 17:42, 13F
→
01/19 17:43, , 14F
01/19 17:43, 14F
→
01/19 18:26, , 15F
01/19 18:26, 15F
→
01/19 18:28, , 16F
01/19 18:28, 16F
→
01/19 18:29, , 17F
01/19 18:29, 17F
討論串 (同標題文章)