我编写了一些以这种方式初始化成员指针的仿函数:
struct A
{
A() {
thust::device_vector<int> d_vect(3);
d_vect[0]=1;
d_vect[1]=2;
d_vect[2]=3;
pointer = thrust::raw_pointer_cast(d_vect.data());
}
__host__ __device__ void operator() {
//code using pointer
};
int* pointer;
};
以这种方式编写的仿函数运行时没有任何明显的问题,所以我很想知道存储在 d_vect
中的数据发生了什么。阅读文档我有这样的印象当 d_vect
超出范围时应该销毁这些数据,所以我希望数据点由 pointer
应该被删除,但事实并非如此。请有人可以向我澄清这件事吗?
最佳答案
您的理解是正确的:thrust::device_vector
是一个托管容器,当它超出范围时会释放所有分配的存储空间。
现在取消分配仅更新有关哪些内存块可以免费使用的簿记信息,它不会显式地用零覆盖这些 block (出于性能原因)。如果这是您希望的行为,您必须手动执行此操作。
关于c++ - 使用构造函数中本地声明的 device_vector 中的 device_vector::data() 方法初始化结构内部的指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103401/