我有一个Linux代码。
我想预先分配10000个不同类型的项目作为循环数组.我总是知道它是哪种对象类型。
因为最大的对象需要54个字节-我想分配10000 x 54块内存。
,检索索引i对象的引用的正确指针算术是什么?
x64体系结构
uint8_t cache[10000 * 54];
MyType* o = static_cast<MyType*>(cache + i * 54);
o.Prop1 = 10;是这样吗?
编辑:我需要最有效的解决方案
EDIT2: --这些是类的实例,而不是结构(如果这对对齐有影响的话)
EDIT3: 54字节是红鲱鱼,考虑任何“适当”的对齐大小,我也用g++编译为C++20 on CentOS9。
发布于 2022-05-16 15:46:41
使用std::array<std::variant<Type1, Type2, Type3, ...>, 100000> cache;
发布于 2022-05-16 15:23:35
指针算法是正确的,但是要非常小心那些结构的大小。除非您防止填充(例如#pragma pack ),否则编译器可以很容易地按您的方式抛出曲线球。
另外,由于您的分配是不对齐的,因此您将对该结构中的每个访问都缴纳适度的性能税。如果内存不是问题,您应该对齐64位对象。
https://stackoverflow.com/questions/72261567
复制相似问题