[問題] 動態宣告陣列

看板C_and_CPP作者 (雨四光)時間14年前 (2011/03/08 15:04), 編輯推噓3(3010)
留言13則, 4人參與, 最新討論串1/1
我想問一下,關於動態宣告陣列的問題 int main(){ const int n=5; int a[n]; return 0; } 上面這幾行,陣列應該是存在stack int main(){ int n=5; int a[n]; return 0; } C99支援上面這種寫法,請問這樣陣列還是存在stack嗎? 這樣寫是否會有任何問題? 因為我要用到 main(){ //do something funct(n); return 0; } void funct(int n){ int a[n]; //do something } 這樣寫可以嗎?或是應該要改成malloc的方法呢? -- 儘管生命的起源只是一種化學反應 儘管人類的存在只是記憶數據的影子 儘管靈魂並不存在,精神只是神經細胞的火花    儘管世上沒有神,人一定要靠一己之力在這殘酷的世界中掙扎求存   我還是...... 我還是...... 要以意識之名命令你───「活下去」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.6.170

03/08 15:07, , 1F
記得有在版上看到類似問題的說明,不知道跑到哪去了..
03/08 15:07, 1F

03/08 15:15, , 2F
VLA也是存在stack CodeGen 會產生%esp-n的類似指令
03/08 15:15, 2F

03/08 15:16, , 3F
來留下一塊空間在 stack 上 大概是這樣 忘記在哪看到了
03/08 15:16, 3F

03/08 15:16, , 4F
最後一個例子不覺得怪怪的嘛 n 是 int* 怎麼當 index
03/08 15:16, 4F

03/08 16:05, , 5F
問題有問題
03/08 16:05, 5F

03/08 16:11, , 6F
打錯啦OTL
03/08 16:11, 6F
※ 編輯: henry666666 來自: 140.114.85.133 (03/08 16:16) ※ 編輯: henry666666 來自: 140.114.85.133 (03/08 16:28)

03/08 19:54, , 7F
就算存在stack也是OS在處理,我們又看不到
03/08 19:54, 7F

03/08 19:55, , 8F
想問啥可否問清楚點.而且陣列index宣告可以不用const!?
03/08 19:55, 8F

03/08 22:02, , 9F
不用const 就是VLA 回原PO 可以 C99以後就行
03/08 22:02, 9F

03/08 22:29, , 10F
歐.原來.謝指教
03/08 22:29, 10F
抱歉,講仔細一點 因為我印象中stack的大小可以在IDE設定 因為我要跑非常大的array 那如果我去調大他的stack,那一開始就佔很多記憶體 ......我是希望他在heap區啦,感覺比較不會有問題 最後還是決定用malloc比較放心 ※ 編輯: henry666666 來自: 140.114.6.119 (03/09 21:21)

03/12 13:06, , 11F
要跑大array請改用malloc,不然你的code放到不同環境可能
03/12 13:06, 11F

03/12 13:06, , 12F
會有問題
03/12 13:06, 12F

03/12 13:07, , 13F
另外你最後一個寫法我很懷疑compile會不會過XD
03/12 13:07, 13F
文章代碼(AID): #1DTTJlbn (C_and_CPP)