作者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