gpt4 book ai didi

c++ - 为什么要在结构中保留内存?

转载 作者:行者123 更新时间:2023-12-01 14:37:02 24 4
gpt4 key购买 nike

我经常在代码中看到结构体,结构体的末尾有一 block 内存预留。


struct STAT_10K4
{
int32_t npos; // position number
...
float Plts;
Pxts;
float Plto [NUM];
uint32_t reserv [(NUM * 3)% 2 + 1];
};
  1. 他们为什么这样做?
  2. 为什么某些保留值取决于常量?
  3. 如果您不进行此类储备会怎样?或者尺寸有误?

最佳答案

这是一种手动填充类的形式,以使其大小成为某个数字的倍数。在你的情况下:

uint32_t reserv [(NUM * 3)% 2 + 1];

NUM * 3 % 2 实际上是无意义的,因为它等同于 NUM % 2(不考虑溢出)。因此,如果数组大小为奇数,我们会在 + 1 额外的 + 1 之上用一个额外的 uint32_t 填充 struct。此填充意味着 STAT_10K4 的大小始终是 8 字节的倍数。

您将不得不查阅您的软件文档以了解为什么要这样做。也许用最多 8 个字节填充此结构会使某些算法更容易实现。或者它可能具有一些可感知的性能优势。但这纯粹是猜测。

通常,如果您使用任何 64 位类型,编译器会将您的 struct 填充到 64 位边界,因此您无需手动执行此操作。


注意:此答案特定于主流编译器和 x86。显然,这不适用于使用 20 位 char & co 编译 TI 计算器。

关于c++ - 为什么要在结构中保留内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63701056/

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