我编写了一些以这种方式初始化成员指针的仿函数:
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
应该被删除,但事实并非如此。有人可以向我澄清这件事吗?
答案 0 :(得分:1)
您的理解是正确的:thrust::device_vector
是一个托管容器,当它超出范围时释放所有已分配的存储。
现在取消分配只更新有关哪些内存块可以自由使用的簿记信息,它没有明确地用零说明覆盖这些块(出于性能原因)。如果这是你想要的行为,你必须手动完成。