gpt4 book ai didi

包含 unsigned char 和 int 错误的 C++ 结构

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:11 24 4
gpt4 key购买 nike

好的,我的 C++ 程序中有一个这样的结构:

struct thestruct
{
unsigned char var1;
unsigned char var2;
unsigned char var3[2];
unsigned char var4;
unsigned char var5[8];
int var6;
unsigned char var7[4];
};

当我使用这个结构时,在“var6”之前添加了 3 个随机字节,如果我删除“var5”,它仍然在“var6”之前,所以我知道它总是在“var6”之前。

但是如果我删除“var6”,那么 3 个额外的字节就没有了。

如果我只使用其中包含 int 的结构,则没有额外的字节。

所以 unsigned char 和 int 之间似乎存在冲突,我该如何解决?

最佳答案

编译器可能正在使用其默认对齐选项,其中大小为 x 的成员在可被 x 整除的内存边界上对齐。

根据您的编译器,您可以使用 #pragma directive 影响此行为,例如:

#pragma pack(1)

将关闭 Visual C++ 中的默认对齐方式:

Specifies the value, in bytes, to be used for packing. The default value for n is 8. Valid values are 1, 2, 4, 8, and 16. The alignment of a member will be on a boundary that is either a multiple of n or a multiple of the size of the member, whichever is smaller.

请注意,出于低级 CPU 性能的原因,通常最好尝试对齐您的数据成员,以便它们落在对齐的边界上。一些 CPU 架构需要对齐,而其他架构(例如 Intel x86)容忍不对齐导致性能下降(有时相当显着)。

关于包含 unsigned char 和 int 错误的 C++ 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937511/

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