首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++20预分配数组以存储多个类型

C++20预分配数组以存储多个类型
EN

Stack Overflow用户
提问于 2022-05-16 15:17:41
回答 2查看 122关注 0票数 0

我有一个Linux代码。

我想预先分配10000个不同类型的项目作为循环数组.我总是知道它是哪种对象类型。

因为最大的对象需要54个字节-我想分配10000 x 54块内存。

,检索索引i对象的引用的正确指针算术是什么?

x64体系结构

代码语言:javascript
复制
uint8_t cache[10000 * 54];

MyType* o = static_cast<MyType*>(cache + i * 54);
o.Prop1 = 10;

是这样吗?

编辑:我需要最有效的解决方案

EDIT2: --这些是类的实例,而不是结构(如果这对对齐有影响的话)

EDIT3: 54字节是红鲱鱼,考虑任何“适当”的对齐大小,我也用g++编译为C++20 on CentOS9。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-16 15:46:41

使用std::array<std::variant<Type1, Type2, Type3, ...>, 100000> cache;

票数 3
EN

Stack Overflow用户

发布于 2022-05-16 15:23:35

指针算法是正确的,但是要非常小心那些结构的大小。除非您防止填充(例如#pragma pack ),否则编译器可以很容易地按您的方式抛出曲线球。

另外,由于您的分配是不对齐的,因此您将对该结构中的每个访问都缴纳适度的性能税。如果内存不是问题,您应该对齐64位对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72261567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档