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

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进行内存申请。

 

使用这个方法的好处是可以对内存分配进行封装,有效改善代码质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值