标签地址 (MSVC)

2024-03-07

我们正在为高级编译语言编写字节码,经过一些分析和优化后,很明显,当前最大的性能开销是我们用来跳转到字节码情况的 switch 语句。

我们研究了提取每个 case 标签的地址并将其存储在字节码流本身中,而不是我们通常打开的指令 ID。如果这样做,我们可以跳过跳转表,直接跳转到当前正在执行的指令的代码位置。这在 GCC 中效果非常好,但是,MSVC 似乎不支持这样的功能。

我们尝试使用内联汇编来获取标签的地址(并跳转到它们),并且它有效,但是,使用内联汇编会导致 MSVC 优化器避免整个函数。

有没有办法让优化器仍然运行代码?不幸的是,我们无法将内联汇编提取到除创建标签的函数之外的另一个函数中,因为即使在内联汇编中也无法引用另一个函数的标签。有什么想法或想法吗?非常感谢您的意见,谢谢!


在 MSVC 中执行此操作的唯一方法是使用内联汇编(这对于 x64 来说基本上是个麻烦事):

int _tmain(int argc, _TCHAR* argv[])
{
case_1:
    void* p;
    __asm{ mov [p],offset case_1 }
    printf("0x%p\n",p);
    return 0;
}

如果你打算做这样的事情,那么最好的方法是用汇编语言编写整个解释器,然后通过链接器将其链接到主二进制文件(这就是 LuaJIT 所做的,这也是 VM 如此糟糕的主要原因)当它不运行 JIT 代码时,速度快得令人眼花缭乱)。

LuaJIT 是开源的 http://luajit.org/,所以如果你走那条路,你可能会从中得到一些提示。或者,您可能想研究第四种的来源(其创建者开发了原则 http://en.wikipedia.org/wiki/Threaded_code你正在尝试使用),如果有一个 MSVC 构建,你可以看到他们是如何完成它的,否则你就只能使用 GCC(它isn't一件坏事,它适用于所有主要平台)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标签地址 (MSVC) 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重

随机推荐

  • 将多个协议 Array> 向下转换为 Array

    所以我有两个数组 var arrayOne Array
  • 向 ASP.NET MVC 的 SiteMap 添加自定义属性

    我在 ASP NET MVC 中使用内置的 ASP NET 站点地图 具有以下架构 http schemas microsoft com AspNet SiteMap File 1 0 http schemas microsoft com
  • 如何在 python 中将数据(或单点)添加到现有的 3d 散点图表达图中

    我有一段代码可以绘制与此类似的图 import plotly express as px import plotly graph objects as go df px data tips fig go Figure data go Sca
  • 无法将 Flask 部署到 Azure

    我正在尝试部署python flask to azure但无法打通 我创建了一个 api 服务Azure 这里是url for my api 并且它与python 3 https textclassifier azurewebsites n
  • PHP crypt() 的输出长度是多少? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions PHP的输出长度是多少crypt m
  • 如何在 SQL Server 中向用户定义的表类型添加索引或主键?

    我有一个用户定义的类型 我想向其中添加主键或索引 IF NOT EXISTS SELECT FROM sys types st JOIN sys schemas ss ON st schema id ss schema id WHERE s
  • 如何在uwp中为特定sdk定义条件编译器符号

    我正在 Visual Studio 2015 中编写一个 UWP 应用程序 最小 sdk 是 10240 最大是 14393 我想编写 sdk 特定代码 所以我想定义一个条件编译符号 我可以简单地在构建选项卡下的项目属性窗口中定义它 但是我
  • 推荐的 VBA IDE [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有推荐的 IDE 用于开发 Excel VBA 宏 提供合理的错误报告和代码完成 目前 我使用的是
  • 插入到android sqlite数据库中的特定行

    我正在寻找一种方法将新条目插入到 android 中的 sqlite 数据库中的特定行中 基本思想是数据库存储如下条目 id day time 1 Monday 09 00 2 Monday 11 00 3 Tuesday 10 00 ID
  • Amazon CloudSearch 从 DynamoDB 创建 Null ID

    我正在尝试开始使用 Amazon CloudSearch 我的数据位于我想要搜索的 DynamoDB 表中 我能够设置云搜索域 它从表中提取字段并让我设置它们 等等 但是 我上传数据时遇到了一些问题 我告诉它要从中提取 DynamoDB 表
  • 结果值在 '? :' 表达式的类型 '()' 和 'Bool' 不匹配[重复]

    这个问题在这里已经有答案了 我有一个双精度数组和一个按钮 按下该按钮会清空数组 我希望仅当数组的计数大于零时才启用该按钮 代码如下 var numbers Double At some point I add some numbers he
  • KnockoutJS 的购物车逻辑(?)问题

    The Goal 制作动态产品列表 场景 我有一个包含产品的购物应用程序 当我点击add button的产品 我想在侧边栏中显示我添加的产品 问题总结 您只需阅读此内容 我的代码中有以下代码ProductsSummary Index csh
  • 开始后跟冒号和变量是什么意思?

    什么是data mux意思是这里 它只是块的名称吗 if PORT CONFIG 32 P0 1 b1 begin data mux end 这些是块名称 它们特别适用于generate块 例如 您可以定义一个generate块如 genv
  • user.status 始终返回“离线”

    我知道user status应该用于返回用户状态 但它总是返回离线状态 无论我或其他参与者更改状态 代码 app commands command name user description f async def user self in
  • std::function 的开销

    我见过很多人们建议不要使用的例子std function lt gt 因为它是一个重量级的机制 有人可以解释一下为什么会这样吗 std function是一个类型擦除类 它采用任何它的构造材料 并删除除以下内容之外的所有内容 使用有问题的签
  • Prettytensor:尝试使用未初始化的值

    我正在关注这些教程 教程4中介绍了prettytensor 按照教程 我编写了这段代码来运行一个小型神经网络 import tensorflow as tf Use PrettyTensor to simplify Neural Netwo
  • 使用控制台应用程序调用非静态类

    我正在尝试使用控制台应用程序调用另一个类的方法 我尝试调用的类不是静态的 class Program static void Main string args Program p new Program var myString p Non
  • 如何使用具有多个同名值的 RouteValues

    在我的 ASP NET MVC 4 应用程序中 我可以过滤多个标签 在 HTML 中 它看起来像这样
  • 没有名为“后端”的模块

    我正在做这个简单的 django 教程http www madewithtea com simple todo api with django and oauth2 html http www madewithtea com simple
  • 标签地址 (MSVC)

    我们正在为高级编译语言编写字节码 经过一些分析和优化后 很明显 当前最大的性能开销是我们用来跳转到字节码情况的 switch 语句 我们研究了提取每个 case 标签的地址并将其存储在字节码流本身中 而不是我们通常打开的指令 ID 如果这样