如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?
Posted FILWY_M
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解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
,这样就达到了我们的目的,关系如下图所示。
以上是关于如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?的主要内容,如果未能解决你的问题,请参考以下文章
如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?