给定一定的固定平台,sizeof可以返回相同类型的不同大小吗?

时间:2017-09-27 08:16:49

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

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

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

是否有任何特定于Microsoft的编译器选项可以在每个项目的基础上改变内置类型的大小?

2 个答案:

答案 0 :(得分:2)

Microsoft的Data Type Ranges

引用
  

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

Type          | Bytes
unsigned long |   4

Fundamental Types C++

  

Microsoft特定

     

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

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

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

<强>更新

  

是否有任何特定于Microsoft的编译器选项可以在每个项目的基础上改变内置类型的大小?

从文档看起来,Microsoft C ++编译器保证它是4个字节。因此,我假设没有可以改变这种情况的选项(至少对于现有的编译器而言)。

答案 1 :(得分:0)

  

我可以假设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