gpt4 book ai didi

c++ - 返回指向从文件读取的字符 vector 数据的浮点指针

转载 作者:行者123 更新时间:2023-11-28 08:11:34 25 4
gpt4 key购买 nike

Resource 中的数据是使用 read 从 fistream 读取的,因为 read 需要一个 char 数组,所以我将它存储在一个 vector 中。当我将数据加载到 GPU 上时,我只需要指向数据的 char 指针。但是例如。如果我需要计算顶点缓冲区的边界框,我需要将数据作为 float 。这是一种可行的方法吗?我应该改为在 GetDataChar() 中返回对 vector 的引用吗?

class Resource
{
protected:
const std::vector<char>& GetDataRef() const
{
return m_data;
}
private:
std::vector<char> m_data;
}

class VertexBuffer : public Resource
{
public:
const char* GetDataChar() const
{
return &GetDataRef()[0];
}

const float* GetDataFloat() const
{
return reinterpret_cast<float*>(&GetDataRef()[0]);
}
}

class IndexBuffer : public Resource
{
public:
const char* GetDataChar() const
{
return &GetDataRef()[0];
}

const int* GetDataInt() const
{
return reinterpret_cast<int*>(&GetDataRef()[0]);
}
}

最佳答案

C++ 标准并没有真正说明这一点:外部化对象,甚至是内置类型,然后读回它们可能有效,也可能无效。在实践中,它往往会解决它通常是一个坏主意:开始时一种快速的做事方式通常很快就会在许多地方使用(毕竟它“有效”)并且有效地将这种方法的使用限制在一个平台上。我从事的项目不只对具有特定字节顺序的 32 位字有很强的依赖性。事实上,当代系统倾向于 64 位字和流行(因此便宜且功能强大)的 CPU 不同的字节序有效地意味着这些项目被限制在相对昂贵的机器上,这些机器被滥用在 32 位兼容模式下运行。

也就是说,尽管标准说明确实做出了任何保证,但它在实践中仍然有效。但是,您选择的方法注定不会工作得很好:char 上实际上没有对齐约束。 ,即 std::vector<char>可以分配内存和快乐放置,例如前面有一个 32 位的字,如果没有其他的供自己娱乐。这意味着您要加载的单词没有正确对齐,或者根本不会加载,或者会以慢动作加载。也就是说,你想要你的 std::vector<T>保存具有最大对齐要求的对象(例如,一些 16 字节的字来处理 128 位的字)并将该类型的地址转换为 char .当然,这仍然意味着需要以与机器上使用的格式完全相同的格式转储数据。如果可能的话,我会尽量避免这种方法。

关于c++ - 返回指向从文件读取的字符 vector 数据的浮点指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8946999/

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