zoukankan      html  css  js  c++  java
  • 为什么cudaMalloc()参数是二级指针

    类似于这个例子

    #include <iostream>
    using namespace std;
    
    void sw(int a,int b)
    {
            int tmp=a;
            a=b;
            b=tmp;
    }
    
    void sw1(int* a,int* b)
    {
            int tmp;
            tmp=*a;
            *a=*b;
            *b=tmp;
    }
    int main(void)
    {
            int a,b;
            a=1;
            b=2;
            sw(a,b);
            cout<<a<<b<<endl;
            sw1(&a,&b);
            cout<<a<<b<<endl;
            return 0;
    }

    直接传值,函数对形参值的修改无法传出,因为形参的是在栈上创建的,函数结束后生命周期就结束了,所以想将修改的值传出来,就要传入要修改值的指针

    同样,如果我想将device上分配的内存地址通过形参传出来,传入参数的形式就是指针的指针,也就是二级指针。

    为什么一级指针不行呢?因为指针的数据类型是整形,如果我在device上分配的空间是float,传入的参数肯定是float,如果使用一级指针float*,那么我只能修改指针中的数据float,float跟我们想传出来的地址的数据类型(int)不一样,所以传入参数必须是二级指针。

    当传入的是二级指针时,比如float**,我想将gpu上分配的float类型的地址传出来,我可以将它赋值给float*,float*的数据类型就是指针类型了

    无情的摸鱼机器
  • 相关阅读:
    简介anaconda下的jupyter notebook的代码分块运行
    此文件的签名已损坏或无效或360下载提示下载失败解决办法
    Java基础加强
    XML
    Servlet
    Tomcat
    json和跨域
    jQuery的ajax
    ajax请求状态码 以及 页面请求状态码
    ajax 基础
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/15770219.html
Copyright © 2011-2022 走看看