首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在64位Windows上,long的位大小是多少?

在64位Windows上,long的位大小是多少?
EN

Stack Overflow用户
提问于 2008-12-21 14:10:43
回答 6查看 208.3K关注 0票数 150

不久前,有人告诉我,64位机器上的long不是64位的,我应该一直使用int。这对我来说是没有意义的。我见过一些文档(比如苹果官网上的那个)说,在编译64位long时,它确实是64位的。我在64位Windows上查了一下,发现

  • 窗口:longint的长度保持为32位,并且为64位整数定义了特殊的新数据类型。

(来自http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2)

我应该使用什么?如果不是在Windows上,我是否应该定义像uwsw (()无符号宽度)这样的东西作为long,否则对目标CPU位大小进行检查?

EN

回答 6

Stack Overflow用户

发布于 2008-12-21 17:03:11

在Unix世界中,64位平台的整数和指针的大小有几种可能的安排。使用最广泛的两个是ILP64 (实际上,这方面的例子很少;Cray就是其中之一)和LP64 (几乎所有其他东西都是这样)。这些首字母缩写来自于“int,long,pointers 64-bit”和“long,pointers are 64-bit”。

代码语言:javascript
复制
Type           ILP64   LP64   LLP64
char              8      8       8
short            16     16      16
int              64     32      32
long             64     64      32
long long        64     64      64
pointer          64     64      64

ILP64系统被抛弃,取而代之的是LP64 (也就是说,根据Aspen小组的建议,几乎所有后来的进入者都使用LP64;只有具有64位操作历史的系统才使用不同的方案)。所有现代64位Unix系统都使用LP64。Linux和MacOS都是现代的64位系统。

微软使用了一种不同的方案来过渡到64位: LLP64 (“长长的指针是64位的”)。这样做的好处是,32位软件无需更改即可重新编译。它的缺点是不同于其他任何人所做的事情,并且还需要修改代码以利用64位容量。总是有必要进行修订;它只是与Unix平台上需要的修订集不同而已。

如果您围绕平台中立的整数类型名称设计软件,则可能使用C99 <inttypes.h>标头,当这些类型在平台上可用时,该标头提供有符号(列出)和无符号(未列出;前缀为'u'):

  • int8_t -8位integers
  • int16_t -16位integers
  • int32_t -32位integers
  • int64_t -64位integers
  • uintptr_t -大到足以容纳pointers
  • intmax_t的无符号整数-平台上整数的最大值(可能大于int64_t)

然后,您可以在重要的地方使用这些类型编写应用程序,并非常小心地使用系统类型(这可能是不同的)。有一种intptr_t类型--一种用于保存指针的带符号整数类型;您应该计划不使用它,或者只将它用作两个uintptr_t值(ptrdiff_t)的减法结果。

但是,正如问题指出的那样(难以置信),64位机器上整数数据类型的大小有不同的系统。习惯它;这个世界不会改变。

票数 277
EN

Stack Overflow用户

发布于 2008-12-21 14:30:42

这篇关于MSDN的文章引用了许多类型别名(在Windows上可用),它们在宽度方面更加明确:

http://msdn.microsoft.com/en-us/library/aa505945.aspx

例如,虽然可以使用ULONGLONG引用64位无符号整数值,但也可以使用UINT64。(尤龙和UINT32也是如此。)也许这些会更清楚一些?

票数 4
EN

Stack Overflow用户

发布于 2008-12-21 16:01:15

微软还为与指针大小相同的整数定义了UINT_PTR和INT_PTR。

这是一个list of Microsoft specific types -它是他们的驱动程序参考的一部分,但我相信它对于一般编程也是有效的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/384502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档