【发布时间】:2015-07-23 17:55:06
【问题描述】:
我已经阅读了为什么sizeof(long long) 在大多数系统上为 8 的问题的答案,但我仍然不确定如何解释它们的含义。
给出的原因之一是“那里”有很多代码假定sizeof(long long) <= sizeof(size_t)。这就说得通了。然后是关于建筑公约和品牌等的各种观点。我什至不想进入那些关于公约历史的辩论。还有一些原因,long long 根据标准可以是任意大小,但我认为这并不是我真正关心的问题。
我想知道的是如何解释现在之间的区别,sizeof(long long) 返回 8 而 long long 实际上是 16。它是否应该被解释为历史残余仅适用于 sizeof 运算符,或者是否存在与该事实相关联的底层地址指针,以便 long long 上的操作以 8 字节增量执行?
Sizeof (signed) long v4: 8 (x at 2147483647)v4 的值:7fffffff
sizeof long long v5: 8 (x at 9223372036854775807)v5 的值:7fffffffffffffff
【问题讨论】:
-
long long应该是 16 个字节吗?long long应该是 64 位类型,因此它的大小应该是 8 字节。看看这个:en.cppreference.com/w/cpp/language/types -
我添加了澄清信息。
-
还是不明白 16 是从哪里来的
-
我将每个“半字节”计算为一个“字节”。我的问题应该是为什么 long 返回 8 但只保留 4 个字节。
-
最初的问题是处理器是否将 long long 视为一个单元。显然,即使是 long 也有 8 个字节,尽管它只使用 4 个字节。不过,这是一个不同的问题。感谢您对原始问题的帮助。