作者jerohands (這就是人生啊)
看板C_and_CPP
標題Re: [問題] malloc問題
時間Mon Mar 16 16:57:54 2009
※ 引述《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
1F:推 Alexboo:推 養成良好的習慣 03/16 17:08
2F:→ stonehomelaa:良好習慣?? C語言哪來的reference呀 03/16 17:49
3F:推 stonehomelaa:而且老外的書沒看過有 call by address 一詞 03/16 17:53
4F:→ stonehomelaa:聽說是台灣人自創的樣子 03/16 17:54
5F:推 littleshan:傳 reference 效能和 pointer 一樣,並不會比較快 03/16 18:13
6F:推 chrisdar: 傳指標的話 有的時候還要 *p 取值 03/16 18:28
7F:推 Killercat:在32bit系統下,4byte以下的資料兩者效能是一樣的 03/16 18:30
8F:→ Killercat:因為reference = pointer, 32-bit系統下是4bytes 03/16 18:30
9F:→ Killercat:所以基本上pass pointer的話,傳ref不但沒意義,而且.. 03/16 18:31
10F:→ Killercat:我不覺得&*很好閱讀 -_- 況且有時還有const問題 03/16 18:31
11F:→ Killercat:說錯 4byte下兩者一樣, 4bytes以下ref還會慢一點 03/16 18:32
12F:→ Killercat:當然4bytes以下的資料非常少見就是 03/16 18:32
13F:推 stonehomelaa:他說的直覺是指alloc(ptr)和alloc(&ptr)相比吧 03/16 18:37
14F:推 lungswu:私以為...這樣做很危險 03/16 21:11