如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?

如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?

了解这个问题首先要理解指针,可以参考这两个博客,这两个博客对于指针的简介很直观。

指针游戏1 最简单的指针游戏_Dezeming的博客-CSDN博客_游戏指针

指针游戏2 传递地址的指针_Dezeming的博客-CSDN博客_指针游戏2

int *dev_c;

cudaMalloc()的第一个参数是一个指针,指向用于保存新分配内存地址的变量。也就是cudaMalloc分配了一块内存,这块内存的位置假设为add,我们想让dev_c获取这个地址,即dev_c=add

如果我们直接使用

cudaMalloc( (void*)dev_c, sizeof(int) );

指针游戏2博客可知,在函数中,会创建形参而代替实参,也就是在 cuda_Malloc函数中,会创建一个指针(形参)这里假设为p,最终将新分配内存的地址add会给p,而不是给了dev_c,显然这不是我们想要的,那么如何让新分配内存的地址给了dev_c,所以需要使用两个星星,也就是双重指针

cudaMalloc( (void**)&dev_c, sizeof(int) );

此时函数中同样会创建一个指针(形参),同样假设为p,此时有p= &dev_c,那么*p=dev_c,此时在函数中将将新分配内存的地址add*p,那么此时就有*p=dev_c=add,这样就达到了我们的目的,关系如下图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3waGsY0o-1638886411841)(C:\Users\13751\AppData\Roaming\Typora\typora-user-images\image-20211207221251842.png)]

おすすめ

転載: blog.csdn.net/qq_43715171/article/details/121780144