[討論] 區域變數 與 malloc/free

看板C_and_CPP作者 (西傑)時間9年前 (2015/10/16 17:43), 9年前編輯推噓4(4012)
留言16則, 4人參與, 最新討論串1/1
最近在寫程式時突然想到一個關於變數宣告問題: 有一個 struct struct _my_strut{ some variable }; 還有個 function void my_func(void){ do something } 現在我要在 my_func 裡宣告一個 struct my_struct 這邊我想到 2 個方法 1. 直接用區域變數宣告 struct _my_struct my_struct; function 結束後記憶體會自動釋放 2. 用 malloc 後 free 掉 struct _my_struct *my_struct = malloc... free(my_struct) 這兩個方法我覺得在使用上是等價的, 不知道有沒有本魯沒有想到的盲點 ============================================== 剛剛突然想到一個重要的差異,return 的問題, 因為 區域變數 不能拿來 return 那除了 reutnr 的問題外,這兩個操作應該是等價吧! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.213.20 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1444988598.A.3E2.html ※ 編輯: CJacky (140.114.213.20), 10/16/2015 17:54:02

10/16 17:50, , 1F
感覺差不多,其實差很多。
10/16 17:50, 1F

10/16 17:54, , 2F
一個是把Struct放在函數裡面,呼叫的時候是函數Stack的
10/16 17:54, 2F

10/16 17:55, , 3F
一部分。malloc是在Heap上要求使用空間,用完還要歸還
10/16 17:55, 3F

10/16 17:56, , 4F
而且在密集執行下malloc效率不如Stack分配,除非你做了
10/16 17:56, 4F

10/16 17:57, , 5F
所以當function呼叫太多層時可以會overflow而找不到變數嗎
10/16 17:57, 5F

10/16 17:57, , 6F
一個memory pool。把對的寫法用在對的地方,兩者差很多
10/16 17:57, 6F

10/16 17:58, , 7F
你說的呼叫到爆炸是Stackoverflow,通常程式是致直接死
10/16 17:58, 7F

10/16 18:00, , 8F
所以一般狀況還是會使用 stack 分配嗎?
10/16 18:00, 8F

10/16 18:01, , 9F
一般都是用stack分配,函數呼叫到爆炸只有recursion
10/16 18:01, 9F

10/16 18:02, , 10F
很多次的狀況比較容易發生,不然正常是不會
10/16 18:02, 10F

10/16 18:03, , 11F
你也不用怕Stack太肥,32bit的定址空間非常大
10/16 18:03, 11F

10/16 18:03, , 12F
對啊,寫程式很自由的XD,也可以用EAX,ECX來搞看看
10/16 18:03, 12F

10/16 18:06, , 13F
剪貼簿,File Mapping,Pipe,mail等等都可以拿來當空間
10/16 18:06, 13F

10/16 23:18, , 14F
可以return 只是return是把 struct copy一份給傳回的變數
10/16 23:18, 14F

10/17 15:01, , 15F
在C不能return的只有區域值的指標跟區域性的陣列
10/17 15:01, 15F

10/17 15:03, , 16F
同moz大大說的,C會把整個struct以副本的方式回傳回去
10/17 15:03, 16F
文章代碼(AID): #1M8CQsFY (C_and_CPP)