看板 C_and_CPP 關於我們 聯絡資訊
最近在寫程式時突然想到一個關於變數宣告問題: 有一個 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
ronin728: 感覺差不多,其實差很多。 10/16 17:50
ronin728: 一個是把Struct放在函數裡面,呼叫的時候是函數Stack的 10/16 17:54
ronin728: 一部分。malloc是在Heap上要求使用空間,用完還要歸還 10/16 17:55
ronin728: 而且在密集執行下malloc效率不如Stack分配,除非你做了 10/16 17:56
CJacky: 所以當function呼叫太多層時可以會overflow而找不到變數嗎 10/16 17:57
ronin728: 一個memory pool。把對的寫法用在對的地方,兩者差很多 10/16 17:57
ronin728: 你說的呼叫到爆炸是Stackoverflow,通常程式是致直接死 10/16 17:58
CJacky: 所以一般狀況還是會使用 stack 分配嗎? 10/16 18:00
ronin728: 一般都是用stack分配,函數呼叫到爆炸只有recursion 10/16 18:01
ronin728: 很多次的狀況比較容易發生,不然正常是不會 10/16 18:02
ronin728: 你也不用怕Stack太肥,32bit的定址空間非常大 10/16 18:03
stupid0319: 對啊,寫程式很自由的XD,也可以用EAX,ECX來搞看看 10/16 18:03
stupid0319: 剪貼簿,File Mapping,Pipe,mail等等都可以拿來當空間 10/16 18:06
mozzan: 可以return 只是return是把 struct copy一份給傳回的變數 10/16 23:18
ronin728: 在C不能return的只有區域值的指標跟區域性的陣列 10/17 15:01
ronin728: 同moz大大說的,C會把整個struct以副本的方式回傳回去 10/17 15:03