gpt4 book ai didi

c++ - 使用构造函数中本地声明的 device_vector 中的 device_vector::data() 方法初始化结构内部的指针是否安全?

转载 作者:行者123 更新时间:2023-11-28 05:40:53 27 4
gpt4 key购买 nike

我编写了一些以这种方式初始化成员指针的仿函数:

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/

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