gpt4 book ai didi

c - 为什么需要强制转换为 void**(例如在 cudaMalloc 调用中)?

转载 作者:行者123 更新时间:2023-12-02 07:23:05 26 4
gpt4 key购买 nike

cudaMalloc()功能是 defined使用:

cudaMalloc ( 
void ** devPtr,
size_t size)

回复 herehere很好地解释为什么应该定义函数以接受指向指针的指针。

然而,我不太清楚为什么我们需要在调用函数时将我们提供的参数类型转换为 void** 类型。例如。在对函数的调用中:
catch_status = cudaMalloc((void**)&device_array, num_bytes);

赠送 here .

据我了解,定义一个接受 void 类型的函数会赋予它更大的灵活性。 IE。看 cudaMalloc()的定义函数,我解释它意味着它可以接受一个指向任何类型对象的指针的指针。因此,为什么需要输入 cast &device_array (在上面的例子中)调用函数时。 (这种类型转换的语法在我在整个网络上看到的 cudaMalloc() 示例中似乎非常普遍)。只要 &device_array满足它是“指向任何类型数据的指针的指针”的条件,这还不足以(a)满足参数的函数定义 cudaMalloc()接受并 (b) 完成我们拥有的任何编程目标?

我在这里错过了什么?

最佳答案

转换到 void**总是错误的,因为这种类型不是 generic pointer .

因此,当函数具有类型 void** 的参数时,传递给它的唯一参数类型可以是:void** ,使任何 Actor 都错误或不必要。

从 cudaMalloc 获取内存的正确方法(忽略错误检查)是:

void* mem;
cudaMalloc( &mem , num_int_bytes );
int* array = mem;

cudaMalloc( &mem , num_double_bytes );
double* floating = mem;

关于c - 为什么需要强制转换为 void**(例如在 cudaMalloc 调用中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com