【问题标题】:Given a certain fixed platform, can sizeof return different size for the same type?给定某个固定平台,sizeof 是否可以为同一种类型返回不同的大小?
【发布时间】:2018-03-08 15:21:03
【问题描述】:

我有一个非常大的旧版 Visual Studio 解决方案,在某些源代码中,我感兴趣的类型是 unsigned long。我无法更改此代码,我想知道用作计数器的该类型变量何时会翻转。

我用一个简单的程序 std::cout << sizeof(unsigned long) 编写了一个不同的非常小的 Visual Studio 项目,我得到了 4:我可以假设 sizeof(unsigned long) 在大解决方案中也提供 4 吗?或者是否有一些构建/编译器选项可以改变它?

是否有任何特定于 Microsoft 的编译器选项可以根据每个项目更改内置类型的大小?

【问题讨论】:

  • 如果您需要一个固定大小的整数,请查看<cstdint>。不要对unsigned long做出假设
  • @StoryTeller 是的,谢谢,我知道<cstdint>
  • 我怀疑你问这个问题是别有用心的。值得在您的帖子中提及。在这种情况下,您得到的答案可能比简单的是/否要好。
  • @StoryTeller 我显然可以添加一点上下文 :-) 即使基于 C++ 标准和/或 Microsoft doc 的是/否答案对我来说就足够了。
  • @StoryTeller 我编辑了问题。

标签: c++ visual-studio visual-c++ build legacy-code


【解决方案1】:

引用微软Data Type Ranges

Visual C++ 32 位和 64 位编译器可识别本文后面表格中的类型。

Type          | Bytes
unsigned long |   4

Fundamental Types C++:

微软特定

下表列出了所需的存储量 Microsoft C++ 中的基本类型。

                       Type                            |  Size
float, __int32, int, unsigned int, long, unsigned long |  4 bytes

所以答案是(对于 Microsoft C++)。

更新:

是否有任何特定于 Microsoft 的编译器选项可以根据每个项目更改内置类型的大小?

从文档看来,Microsoft C++ 编译器保证它是 4 个字节。因此,我假设没有任何选项可以改变这一点(至少对于当前现有的编译器)。

【讨论】:

  • 你写的是正确的,但它似乎没有回答我的问题。是否有任何特定于 Microsoft 的编译器选项可以改变内置类型的大小?
  • @AlessandroJacopson 从文档中逻辑上讲,Microsoft C++ 编译器的大小始终为 4。因此,我认为它不能通过编译器选项进行更改(至少对于当前现有的编译器)。更新了帖子。
【解决方案2】:

我可以假设 sizeof(unsigned long) 在大解中也给出 4 吗?

是的,特别是(Windows、Visual Studio)。 一般情况下没有。

sizeof( void *) : depends on the target platform.
sizeof( long  ) : standard guarantees at least 4 bytes, but it could be larger.

见:SO : sizeof basic types

【讨论】:

  • 对微软文档的任何引用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2010-09-12
相关资源
最近更新 更多