相关疑难解决方法(0)

std :: tuple内存对齐

是否有关于元组伪成员的布局和内存对齐的正式规范?

反正有没有修改元组中类型的内存对齐?它是否受#pragma pack()指令的影响?

例如:

typedef std::tuple<uint8_t, uint32_t> myTuple;
Run Code Online (Sandbox Code Playgroud)

是否有任何规范说这将在内存中与以下相同:

#pragma pack() // Default packing
struct myStruct
{
    uint8_t first;
    uint32_t second;
}
Run Code Online (Sandbox Code Playgroud)

抱歉,如果这是一个愚蠢的问题,但我不完全理解模板的对齐.

编辑:我正在努力完成的例子

目前我有一些东西......

#pragma pack(push)
#pragma pack(4)
struct cTriangle
{
    uint32 Index[3];
};
#pragma pack(pop)

template <class T>
inline bool Read(cFileStream& fStream, std::vector<T>& vec)
{
    if (!vec.size())
        return true;

    // fStream.Read(void* pBuffer, size_t Size)
    // Just a wrapper around a binary ifstream really
    return fStream.Read(&vec[0], sizeof(T) * vec.size());
}

std::vector<cVector3> vPoint;
vPoint.resize(Verticies);
bool result = Read(FileStream, vPoint);
Run Code Online (Sandbox Code Playgroud)

如果我想为元编程目的使用typedef …

c++ tuples memory-alignment language-lawyer c++11

13
推荐指数
2
解决办法
5130
查看次数

C++:OpenGL,glm和struct padding

我可以安全地使用glm ::*类型(例如vec4,mat4)来填充顶点缓冲区对象吗?

std::vector<glm::vec3> vertices;    
glBufferData(GL_ARRAY_BUFFER,  sizeof(glm::vec3) * vertices.size(), &vertices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

我不太确定,因为在我看来,struct padding(成员对齐)可能会导致一些麻烦,尽管我测试的所有编译器都会返回预期的大小.

我正在为C++ 11编译器开发(也许这会有所不同).

c++ opengl vertex-buffer c++11

12
推荐指数
1
解决办法
3831
查看次数