You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:22:01