gpt4 book ai didi

c++ - 在C++中的连续内存区域中存储多个结构

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

我想将一个由多个不同类型的 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/

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