c++ - 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 语言将它们分开?
解决方案
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
.
推荐阅读
- r - ggplot 将不同的图形合二为一
- javascript - 在根和任何对象之间的对象树中查找对象
- neo4j - 如何检查节点是否全局存在并在 Cypher 中设置条件?
- storage - 存储 api 不适用于 Microsoft Edge 上的自签名扩展
- sql-server - SQL Server 命名实例 TCPIP 端口设置和端点/基础结构权限错误
- python-3.x - 当我多次运行此代码片段时,它会在 python 中生成一个随机偶数,它会打印“无”一段时间。为什么会这样?
- java - Windows 上的 Java 时钟精度:15-16ms
- autohotkey - 使用连接文本+变量设置控件名称以供 ControlSetText 使用
- sql-server - 链接服务器“Servername”的 OLE DB 提供程序“SQLNCLI11”返回消息“没有处于活动状态的事务”。
- javascript - 将 onclick 事件添加到 Wix 表单