C ++ Long Long INT - 64位是否限制仅用于64位操作系统?

时间:2016-01-23 13:43:23

标签: c++

使用64位的C ++ Long Long int会限制使用此程序仅执行64位操作系统,还是在32位操作系统上执行时仍能处理64位值?

我有一个程序,我将整数种子传递给随机生成器,并使用种子作为随机算法中起始位置的关键。我使用long long int编译我的代码并且它编译并运行没有问题但是我的系统运行Windows 7 64位并且我没有32位系统来测试它。虽然这个程序主要在我的64位系统上运行,但这个问题背后的原因是要了解长期int使用是仅用于64位OS系统还是32位系统可以处理64位int's或更多时钟周期来处理64位与64位操作系统能够在更少的时钟周期等处理它?也许我正在将苹果与64位int与64位CPU / OS进行比较?认为如果能够由32位CPU / OS处理它在64位int中可能效率低下?

7 个答案:

答案 0 :(得分:1)

简短回答 - 否。

术语32位和64位指的是计算机处理器处理信息的方式。 64位版本的Windows比32位系统更有效地处理大量随机存取存储器(RAM) 如果你有一个long long int,它只是意味着它在内存中占用64位。

有关32位和64位处理器之间差异的完整理解,请参阅What is the difference between a 32-bit and 64-bit processor?

另请查看 - https://en.wikipedia.org/wiki/64-bit_computing

答案 1 :(得分:1)

简而言之,没有。

使用long long类型并不限制您对操作系统的选择。如果您的编译器支持long long并以32位操作系统(甚至是16位操作系统)为目标,那么编译器或库会对如何支持更长类型的详细信息进行排序。

使用long long类型会限制您使用支持此类型的编译器(和库),无论您使用何种操作系统。在C ++中,2011标准引入了它们,但是一些较旧的编译器支持long long类型作为扩展(例如,因为C自1999年以来)。因此,早于2011年标准的编译器可能不支持long long类型。

答案 2 :(得分:0)

memmory中的整数大小与CPU使用的位数无关。 hoewever int的长度可以变化,因为该处理器总是尝试以最有效的方式运行,因此对于32位处理器,int将具有32位的默认大小。 使用long long int或uint64(64位无符号整数)等类型将保证所有处理器的64位长度。所以记住这一点很好。

答案 3 :(得分:0)

当您在32位计算机上运行程序时,您担心程序是否运行相同。你不应该。

如果它被编译为32位应用程序,它将始终运行相同,它只是不会使用64位处理器的功能。所以你可能已经猜到long long对32位编译器没问题,否则你将无法构建你的程序。

如果它被编译为64位应用程序,它将无法在32位计算机上运行。

答案 4 :(得分:0)

不,它完全取决于操作系统和正在使用的编译器使用的数据模型。在C ++中,自C99起,long long int的大小为64位。事实上,大多数Linux / Unix实现定义为64位类型,但在Windows中仅为32位,因为它们使用不同的数据模型。看看与模型相关的给定64 bit computing

答案 5 :(得分:0)

编辑:long long int始终存在于C ++ 11实现中,并且它至少有64位,因为5.2.4.2.1中的 C标准(不是C ++标准)要求它(通过定义LLONG_MAX的最小值)。那意味着你应该没事。在32位系统上,库可能很慢或者不可用。

答案 6 :(得分:-1)

long long int不保证是64位整数。至少不是C ++标准:

  

3.9.1基本类型[basic.fundamental]

 ...
     

2有五种标准的有符号整数类型:“signed char”,“short int”,“int”,“long int”和“long long int”。在此列表中,   每种类型至少提供与之前相同的存储空间   列表。可能还有实现定义的扩展签名   整数类型。标准和扩展有符号整数类型是   统称为有符号整数类型。平原有自然的特征   由执行环境的体系结构建议的大小;   提供其他有符号整数类型以满足特殊需求。

换句话说,唯一的保证是long long int至少与long int一样大。那就是它。

现在,在大多数现代执行环境中,long long int是64位值,即使在本机32位硬件平台上也是如此。

但是,就C ++标准而言,你无法保证。因此,您可能会发现在特定的32位平台上,long intlong long int都是32位整数值。这将完全符合C ++标准。

相关问题