thrust::device_ptr是否接管所指向对象的生命周期?
thrust::device_ptr 是否接管对象生命周期?
结论:thrust::device_ptr 不会接管底层设备内存的生命周期,它只是一个轻量的设备指针包装器,仅用于适配Thrust算法接口,不具备内存所有权管理能力。
看你提供的示例代码(注意原代码中cudaMalloc调用存在小问题,需要传入指针的指针,已修正):
int* some_memory; cudaMalloc(&some_memory, 100); thrust::device_ptr<int> thrust_ptr(some_memory); ... // 是否需要执行? // cudaFree(thrust_ptr.get()); // 还是thrust::~device_ptr()会自动调用?
- 你必须手动调用
cudaFree(thrust_ptr.get())来释放内存,thrust::device_ptr的析构函数不会自动触发cudaFree。 - thrust::device_ptr的核心作用是让原始设备指针能被Thrust的算法(如
thrust::copy、thrust::sort)直接使用,它不会改变内存的所有权归属,内存的分配和释放逻辑完全由你自己负责。
总结:用cudaMalloc分配的设备内存,无论是否包装成thrust::device_ptr,都需要你手动调用cudaFree释放。
内容的提问来源于stack exchange,提问作者arsdever
相关产品推荐
相关产品推荐

