c++ - std::tuple 内存对齐

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

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

有没有办法修改元组中类型的内存对齐方式?是否受#pragma pack() 指令影响?

例如:

typedef std::tuple<uint8_t, uint32_t> myTuple;

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

#pragma pack() // Default packing
struct myStruct
{
    uint8_t first;
    uint32_t second;
}

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

编辑:我正在尝试完成的示例

目前我有一些类似...

#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);

如果我想输入 cTriangle作为 std::tuple<uint32, uint32, uint32>出于元编程的目的,我是否仍然能够读取/写入元组的原始内存(因此是元组的 vector ),或者该内存是否具有未知的对齐方式?

最佳答案

不仅没有要求以任何特定方式排列对象,而且许多 tuple 实现实际上将第二个对象放在第一个对象之前。

关于c++ - std::tuple 内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597006/

相关文章:

c++ - std::conditional 如何工作

c++ - 如何将函数变量传递给 C++ lambda 函数

c++ - 在对象列表上使用迭代器时遇到问题

java - 在 Java 中通过 UDP 发送 C++ 结构

c++ - 整齐地约束 API 模板类型

python - 在一个元组内重复一个元组

Swift:从元组中获取一个元素

c++ - 对指针不了解

C++ 初始化静态堆栈

javascript - 为什么这个冒泡排序不起作用