函数的原型:
cudaError_t cudaMalloc (void **devPtr, size_t size );
cudaMalloc的第一个参数传递的是存储在cpu内存中的指针变量的地址,cudaMalloc在执行完成后,向这个地址中写入了一个地址值(此地址值是GPU显存里的)。
既然cudaMalloc的第一个参数传递的是存储在cpu内存中的指针变量的地址,那直接&device_data好了,为什么前边还要写(void**)
因为cudamalloc的c接口的第一个参数是void**,c语言有些编译器不支持隐式类型转换,而大部分c++支持这种隐式转换。