Re: [問題] malloc問題

看板C_and_CPP (C/C++)作者 (這就是人生啊)時間16年前 (2009/03/16 16:57), 編輯推噓7(707)
留言14則, 6人參與, 最新討論串4/6 (看更多)
※ 引述《timlong (timlong)》之銘言: : void alloc_mem(int **p) : { : *p = (int *)malloc(sizeof(int)); : } : int main() : { : int *ptr=NULL; : alloc_mem(&ptr); : /*...*/ : } 在下也來分享一下: void alloc_mem(int *&p) ← 使用 call by reference { p = (int*)malloc(sizeof(int)); } int main() { int *ptr = NULL; alloc_mem(ptr); return 0; } 關於賦予函式參數值的方式, timlong 大使用的是 call by address,這在 Win32 API 也很常見。 用 call by address 和 call by reference 的差別, 前者是額外配置一個記憶體的指標指到傳入的參數, 後者則為直接傳入參數本身的記憶體位址, 在效能上佔有優勢且在coding上也比較直覺。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.44.9

03/16 17:08, , 1F
推 養成良好的習慣
03/16 17:08, 1F

03/16 17:49, , 2F
良好習慣?? C語言哪來的reference呀
03/16 17:49, 2F

03/16 17:53, , 3F
而且老外的書沒看過有 call by address 一詞
03/16 17:53, 3F

03/16 17:54, , 4F
聽說是台灣人自創的樣子
03/16 17:54, 4F

03/16 18:13, , 5F
傳 reference 效能和 pointer 一樣,並不會比較快
03/16 18:13, 5F

03/16 18:28, , 6F
傳指標的話 有的時候還要 *p 取值
03/16 18:28, 6F

03/16 18:30, , 7F
在32bit系統下,4byte以下的資料兩者效能是一樣的
03/16 18:30, 7F

03/16 18:30, , 8F
因為reference = pointer, 32-bit系統下是4bytes
03/16 18:30, 8F

03/16 18:31, , 9F
所以基本上pass pointer的話,傳ref不但沒意義,而且..
03/16 18:31, 9F

03/16 18:31, , 10F
我不覺得&*很好閱讀 -_- 況且有時還有const問題
03/16 18:31, 10F

03/16 18:32, , 11F
說錯 4byte下兩者一樣, 4bytes以下ref還會慢一點
03/16 18:32, 11F

03/16 18:32, , 12F
當然4bytes以下的資料非常少見就是
03/16 18:32, 12F

03/16 18:37, , 13F
他說的直覺是指alloc(ptr)和alloc(&ptr)相比吧
03/16 18:37, 13F

03/16 21:11, , 14F
私以為...這樣做很危險
03/16 21:11, 14F
文章代碼(AID): #19lXIJIo (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 4 之 6 篇):
2
3
1
6
文章代碼(AID): #19lXIJIo (C_and_CPP)