您的位置:首页 > 其它

cuda中内存申请使用void**的原因

2010-03-22 18:01 381 查看
cuda中的内存申请都是使用的void**,为什么要用void**原因如下.

通常我们写函数时,如果将一个指针作为参数传给某个函数,其实这个指针是被复制了一份的,不过新复制的指针指向的地址是和原来那个相同的。如

void memalloc(int * p1){

p1 = (int*)malloc(10);

}

int main(){

int * a = 0x1122;

memalloc(a);

}

此时a指向的地址为0x1122,而将a传给memalloc后,p1指向的地址还是0x1122,但是p1和a是两个不同的指针,他们两个在内存中有不用的地址空间。

所以如果使用上面的方法申请内存的话,p1是指向新的内存的,但是a还是指向了0x1122,内存是无法通过a访问的。

在cuda中使用void**来解决这个问题

void memalloc(void ** p1){

*p1 = malloc(10);

}

int main(){

int * a = 0x1122;

memalloc((void**)&a);

}

上述方法将a的地址作为参数传给了memalloc,这个好处在于p1相当于指向a的地址的指针,而*p1才是真正a的地址。

通过对*p1进行内存申请,效果是等同于对a进行内存申请。

使用这个方法的好处是可以对内存分配进行封装,有效改善代码质量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: