gpt4 book ai didi

c++ - ULARGE_INTEGER union 的意义何在?

转载 作者:可可西里 更新时间:2023-11-01 13:50:46 25 4
gpt4 key购买 nike

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383742%28v=vs.85%29.aspx

它们应该是这样使用的,在 LowPart 和 HighPart 上设置两个 32 位的值,然后在 QuadPart 上进行运算。

int a,b,c;
ULARGE_INTEGER u;
...
u.LowPart = a;
u.HighPart = b;
u.QuadPart += c;

因此,如果您要在 QuadPart(64 位)上执行算术运算,无论如何您都需要 64 位处理器,对吗?那么重点是什么?为什么不直接将值分配给 QuadPart?

最佳答案

您不需要 64 位处理器来对 64 位数据类型执行算术运算。我所知道的所有 32 位编译器都支持 64 位整数的算术运算。如果硬件不允许 native 算术,则编译器必须生成代码来执行算术。通常,这将利用编译器 RTL 中的支持函数。

该结构旨在供不为 64 位数据类型提供 native 支持的编译器使用。非常documentation您链接到的内容清楚地表明了这一点:

Note Your C compiler may support 64-bit integers natively. For example, Microsoft Visual C++ supports the __int64 sized integer type. For more information, see the documentation included with your C compiler.

不支持 native 64 位整数的编译器将无法将 QUADPART union 成员视为整数。

typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;

以及ULONGLONG的定义:

#if !defined(_M_IX86)
typedef unsigned __int64 ULONGLONG;
#else
typedef double ULONGLONG;
#endif

当然,过去 10 年(或更长时间)内编写的所有编译器都将原生支持 64 位整数。但是这个 union 最初是在很久以前引入的,那时的编译器环境会有所不同。查看 Windows 头文件时,请始终牢记历史和遗产。

关于c++ - ULARGE_INTEGER union 的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14915752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com