gpt4 book ai didi

C++ 备用数据以保持对象大小相同?

转载 作者:太空狗 更新时间:2023-10-29 23:49:08 26 4
gpt4 key购买 nike

我在一家使用大型 C++ 项目来自动化制造过程的公司工作,在查看 C++ 源代码的修订历史时,我注意到以下特殊行为。

下面显示了软件不同版本中此行为的简化示例。

软件修订版 1:

struct Foo
{
int x;
int reserve[20]; // unused
};

软件修订版 2:

struct Foo
{
int x;
int y[2];
int reserve[18]; // unused
};

软件修订版 3:

struct Foo
{
int x;
int y[2];
int z[5];
int reserve[13]; // unused
};

很明显,未使用的 reserve 数组只是为了确保创建的结构的任何实例始终占用相同数量的内存,而不管软件正在运行哪个版本.

我的问题是:对于大型 C++ 项目来说,这是常见做法和/或良好做法吗?是否有任何一般的(一般意义,非特定于应用程序的)理由表明使用这种做法是必需的或有利的?

最佳答案

是的,这是一种常见的做法。我不能说这是好事还是坏事,因为这要视情况而定。

  • 如果您的结构代表某种类型的数据包或数据来自某些规范的字段,那些通常有保留字段。有时在开发规范的新版本时,那些保留字段用于有意义的事情。我曾与PCIe 规范合规性,这种情况发生过几次。
  • 如果您希望能够将一些新数据添加到您的网络中数据包,但您希望旧版本的客户端能够读取数据包就好像它们是旧版本一样,这可能是合理的有时解决。

当然,这样做时你必须小心,因为你可能会在未来的某个时候用完保留字段,通常是在你意想不到的地方。

关于C++ 备用数据以保持对象大小相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46344045/

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