2017-09-27 77 views
1

我有一个非常大的传统Visual Studio解决方案,并且在我感兴趣的类型的某些源代码中是unsigned long。我无法更改此代码,我想知道何时用作计数器的该类型的变量会发生滚动。给定一个固定的平台,sizeof可以为同一类型返回不同的大小吗?

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

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

+1

如果您需要一个固定大小的整数,请查看''。不要假设'unsigned long' – StoryTeller

+0

@StoryTeller是的,谢谢,我知道''。 –

+1

我怀疑你有这个问题的别有用心的动机。值得在你的帖子中提及它。在这种情况下得到的答案可能会比简单的是/否更好。 – StoryTeller

回答

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

+0

对Microsoft文档的任何引用? –

2

行情从微软的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 Visual C++)。

更新:

有没有具体到微软的任何编译器选项,可以改变大小的内置类型上每个项目的基础是什么?

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

+0

你写的是正确的,但似乎没有回答我的问题。是否有任何特定于Microsoft的编译器选项可以改变内置类型的大小? –

+1

@AlessandroJacopson它从逻辑上遵循文档,Microsoft C++编译器的大小始终为4。因此,我认为,它不能通过编译器选项进行更改(至少对于当前现有的编译器)。更新了帖子。 – AMA

相关问题