精華區beta Programming 關於我們 聯絡資訊
※ 引述《swli.bbs@bbs.ntu.edu.tw (我喜歡寫程式)》之銘言: : ==> jenniskuo.bbs@ptt.cc (冷暖) 提到: : > 不知道我這樣想對不對, : > 根據你所說的, : > char *str = "string"; 這個敘述代表 "str變數" 放在 stack 中, : > 而 "string" 本身是放在 heap 中. : > char str[] = "string"; 這個敘述代表 "str常數" 放在常數區段, : > 而 "string" 本身是放在 stack 中. : > 是嗎 ? : 是的, 我的意思大體上就是這樣, 但沒有你說的放常數的區段. : 藉此修正一個說法, char *str = "string"; 的 "string" 是不是在 heap 中, : 我並沒有嚴格的去探究,主要的意思是它會被擺在一個安全可供存取的區段裡頭. : 在char str[]="string"; 宣告中的str 常數, 並不需要放在常數區段或者任何 : 記憶體中, 它就只是個數字罷了. 這個數字或許你可以把它想像成一個標籤, 是不是就是說,char *str = "string"; 這行會分配兩塊記憶體,一塊是存放 "string",一塊是存放 str 這個 pointer。而 char str[] = "string"; 這 一行只會分配一塊記憶體,就是"string" ? : 在編譯過程中, 只要用到這個常數, compiler 就會直接以這個值去計算記憶體 : 的參考位址. : 當你直接採用 char str[] = "string"; 的方式宣告一個 local array 時 : 前面有網友也說了, compiler 的動作會類似 直接在 stack 中塞進 's', : 't', 'r','i','n','g','\0x0', 並賦予 str 這個常數值為存放第一個字元 : 's' 的 memory address 值的常數意義. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.129.246
meltice:剛好相反 218.211.16.19 12/10 17:45
meltice:"string"本身也會佔掉一塊記憶體 218.211.16.19 12/10 20:31