c - 如何确保 C 代码中没有浮点运算(Visual Studio 2013 express + WDK 8.1,WDM 内核驱动程序)?

标签 c windows visual-studio floating-point

几年前,我遇到了一个修改过的 moufiltr 驱动程序(由 Povohat 制作),它允许用户设置自定义的鼠标加速。该驱动程序使用浮点运算。 我在 WDK7 示例中找到了一个 mouclass 示例驱动程序,它基于 povohat 的 moufiltr 驱动程序我已经修改了这个示例以包括可调加速度(来自 Quake 3 cl_input.c 的方程式),但使用放大的整数而不是 double ,因此不需要 KeSaveFloatingPointState。这样做的目的是为 Windows XP 也提供一些东西。

如果在计算中只使用 LONGLONG 类型的变量 (+,/,*,%),是否可以假设没有使用浮点运算?

最佳答案

即使您的代码没有浮点文字、浮点变量和浮点强制转换,假设它在编译的机器代码级别没有浮点操作也是不安全的。通常,在关闭优化的情况下,编译后的代码基本上是源代码的直接翻译,在这种情况下,如果源代码中没有浮点机制,那么编译后的代码中也不会。然而,编译器通常可以完全访问目标体系结构的指令集,并且启用优化后,它们将根据优化标准(通常是速度和/或大小)对最终编译输出进行大量修改。在这种情况下,如果某些(或全部)浮点指令被编译器认为是必要的,那么即使您的源代码中没有它们,它们也会出现在编译后的机器代码中。如果你的编译器不支持限制它可以使用的机器代码(汇编程序)指令,而 VS 2013 Express 不支持,那么唯一的方法就是反编译你的编译代码并自己寻找浮点指令。

关于c - 如何确保 C 代码中没有浮点运算(Visual Studio 2013 express + WDK 8.1,WDM 内核驱动程序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58494798/

相关文章:

c# - C# 或 C 的高性能 RSA 实现

python - Windows 上 cvxopt 的导入问题

c# - ClickOnce 需要 System.Windows.Interactivity 版本 4.5.0.0

c - 字符宽度 1 和例如 6 有什么区别

ios - OpenGL 加载后添加顶点

python - 如何使用Python在Windows中设置代理?

javascript - 带有 Canvas 的 HTML5/JavaScript 文件不适用于 Windows 8 上的 Chrome 和 Firefox,但适用于 Windows 7 上的所有浏览器。为什么?

visual-studio - 从各个页面捕获自定义事件

c++ - 转到函数定义未声明的位置并绕过字符串创建

c - 函数 _IO_file_init 和 _IO_file_fopen 的定义