我想将由各种类型的多个POD结构组成的状态变量存储到单个存储区中。由于用于组合状态变量的结构的组合是在运行时确定的,因此我不能仅将它们放入周围的结构或类中。我也希望内存分配的数量尽可能少。
最好的方法是什么?以下代码是否合法/可移植,或者会在某些平台上/某些编译器中导致对齐错误?

struct TestA {
    int a;
    short b;
};

struct TestB {
    int c;
    float d;
    char e;
};

int main() {
    void* mem = new uint8_t[sizeof(TestA) + sizeof(TestB)];
    TestA* a1 = (TestA*) mem;
    a1->a = a1->b = 42;
    a1++;
    TestB* b = (TestB*) a1;
    b->c = 5;
    b->d = 23.f;
    b->e = 'e';
}

最佳答案

您实际上想做的是“重新放置”。因此,所有注意事项也适用于此。如果给定类型的内存位置未正确对齐,那么您将陷入未定义的行为。在您的代码中:

a1++;


不能保证为TestB提供正确对齐的地址。因此,您的代码不符合标准。

关于c++ - 在C++中的连续存储区域中存储多个结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13550498/

10-11 23:00
查看更多