首页 > 解决方案 > SIZE_T 和 unsigned long 有什么区别?

问题描述

我很好奇 和 的SIZE_T区别unsigned long

当我看到时sizeof(SIZE_T),我通过 VS 中的声明跟踪来跟踪它。

basetsd.h然后,我在档案里看着他们。

typedef ULONG_PTR SIZE_T, *PSIZE_T;

typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;

他们有什么区别?

为什么 c 语言将它们分开?

标签: c++c

解决方案


SIZE_T是 Windows 数据类型,而不是标准类型。至于区别,SIZE_T可能不是unsigned long。看看这个列出 Windows 数据类型的页面。条目SIZE_T说:

指针可以指向的最大字节数。用于必须跨越指针整个范围的计数。

此类型在 BaseTsd.h 中声明如下:

typedef ULONG_PTR SIZE_T;

ULONG_PTR具有以下条目:

一个未签名的LONG_PTR.

此类型在 BaseTsd.h 中声明如下:

#if defined(_WIN64)
  typedef unsigned __int64 ULONG_PTR;
#else
  typedef unsigned long ULONG_PTR;
#endif

所以它可能是unsigned long,或者它可能是unsigned __int64。在您的情况下ULONG_PTR,反过来又SIZE_T被定义为,unsigned long但情况可能并非总是如此。

在您的具体情况下,ULONG_PTR定义为_W64 unsigned long,但我相信这与unsigned __int64.


推荐阅读