gpt4 book ai didi

c++ - 64位计算机上的C++内存对齐

转载 作者:行者123 更新时间:2023-12-02 10:20:47 31 4
gpt4 key购买 nike

Class A
{
public:
void fun1();
void fun2();

private:
uint16 temp_var;
};

有什么原因为什么我不应该只将此变量uint16设置为完整的uint64?这样做(uin16),我是否在对象中留下了内存“空洞”?我被告知处理器在处理完整的uint64上效率更高。
为了澄清起见,temp_var是唯一的成员变量。而且没有我在哪里使用它的size(temp_var)或作为计数器循环回到零

谢谢大家的投入,谢谢。

最佳答案

如果问题是,编译器可以执行替换操作吗:

您要求输入一个uint16,所以它给了您一个uint16。得到其他东西会令人惊讶。

例如,假设开发人员是否指望整数上溢或下溢的行为。在那种情况下,如果编译器在后台替换了uint64,那么对于开发人员来说,这将是令人惊讶的问题。

同样,人们会期望sizeof(temp_var)等于sizeof(uint16)

可能在其他情况下,这种替换可能导致开发人员无法预期的意外行为。

如果问题是,开发人员是否可以选择其他方式:

当然,如果您想要该大小的变量,则可以。那么,在某些情况下您将不会...

如果您依赖uint16的上溢/下溢行为,那么您当然要坚持这样做。

或者,可能会将这些数据传递到仅支持uint16范围内的值的其他位置,因此,将其保留为该大小可能是逻辑上的尝试隐式记录有效内容和/或避免编译器警告的逻辑。

同样,出于某些与程序其他部分相关的逻辑原因,您可能希望sizeof(temp_var)为2个字节而不是8个字节。

我还希望有一些可以用打包实用程序玩的游戏,但我想这与预期的问题无关。

根据程序的目标,代码的逻辑一致性或清晰度可能比最大可能的性能更重要(尤其是在微观级别上关注成员变量的大小/类型)。换句话说,uint16对于许多用例仍然足够快。

但是,在某些情况下,没有任何令人信服的理由以一种或另一种方式做出决定。到那时,根据个人的感受,我会选择最有意义的东西。

关于c++ - 64位计算机上的C++内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60274120/

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