首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >最优虚拟机/字节码解释器循环

最优虚拟机/字节码解释器循环
EN

Stack Overflow用户
提问于 2011-04-11 05:27:06
回答 3查看 1.9K关注 0票数 6

我的项目有一个VM,它执行从特定域语言编译的字节码。我正在研究如何提高字节码的执行时间。作为第一步,我想看看是否有一种方法可以简单地改进字节码解释器,然后再进行机器代码编译。

解释器的主循环如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(true)
{
  uint8_t cmd = *code++;
  switch( cmd )
  {
    case op_1: ...; break;
    ...
  }
}

问题:是否有更快的方法来实现这个循环而不求助于汇编程序?

我看到的一个选项是GCC特定于使用带有标签地址的dynamic。我可以直接跳到下一条指令,而不是在每一种情况的结尾处使用break。我本来希望优化器能帮我做到这一点,但从拆卸的角度看,它显然并非如此:在大多数op_codes的末尾,总是会有一个不断的跳变。

如果相关的话,VM是一个简单的基于寄存器的机器,具有浮点数和整数寄存器(每个寄存器有8个)。没有堆栈,只有全局堆(该语言没有那么复杂)。

EN

回答 3

Stack Overflow用户

发布于 2011-04-11 05:33:29

一个非常简单的优化是,不是切换/情况/情况,

只需定义一个带有函数指针的数组(每个函数将处理指定的命令,或者一对命令,在这种情况下,可以将数组中的多个条目设置为同一个函数,并且函数本身可以检查确切的代码),而不是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch(cmd)

只要做一个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array[cmd]()

这是因为您没有太多的命令。此外,如果您没有定义所有可能的命令(可能只有300个命令,但是您必须使用2个字节来表示它们,所以不要定义包含65536项的数组,只需检查命令是否小于301,如果不是,就不要进行查找)。

如果您不这样做,那么至少对开关语句开头最常用的命令进行排序。

否则,就需要查看哈希表,但我假设您没有那么多命令,在这种情况下,执行哈希函数的开销可能比不需要进行切换花费更大。(或者有一个非常简单的散列函数)

票数 3
EN

Stack Overflow用户

发布于 2011-04-11 05:35:25

建筑是什么?您可能会得到一个与字对齐操作码的速度,但它会吹灭您的代码大小,这意味着您将不得不平衡它和缓存错过的成本。

票数 1
EN

Stack Overflow用户

发布于 2011-04-11 06:05:28

我看到很少有明显的优化,

  1. 如果您没有在任何地方使用cmd而不是switch(),那么直接使用指针间接,switch( *code++ )。对于更长的while(true)循环,这可能没有多大帮助。
  2. In switch(),您可以使用continue而不是break。因为当continueif/elseswitch中使用时,编译器知道执行必须跳转到外部循环;对于break (关于switch)则不是这样。希望这能帮上忙。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5622030

复制
相关文章
为什么 build 方法放在 State 中而不是在 StatefulWidget 中
为什么 build 方法放在 State 中而不是在 StatefulWidget 中呢?其中前2点是源代码的注释中给出的原因,最后一点是我的一点个人理解。
老孟Flutter
2021/01/28
9130
Django 2.1.7 Admin - 列表页选项
https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial07/
Devops海洋的渔夫
2019/07/08
1.1K0
Django 2.1.7 Admin - 列表页选项
39. Django 2.1.7 Admin - 列表页选项
1)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
Devops海洋的渔夫
2022/01/17
3880
39. Django 2.1.7 Admin - 列表页选项
WideNet:让网络更宽而不是更深
这是新加坡国立大学在2022 aaai发布的一篇论文。WideNet是一种参数有效的框架,它的方向是更宽而不是更深。通过混合专家(MoE)代替前馈网络(FFN),使模型沿宽度缩放。使用单独LN用于转换各种语义表示,而不是共享权重。
deephub
2023/08/30
2180
WideNet:让网络更宽而不是更深
在 Django Admin 后台发布文章
在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 Admin 后台来发布我们的博客文章。 创建 Admin 后台管理员账户 要想进入Django Admin 后台,首先需要创建一个超级管理员账户。我们在 让 Django 完成翻译:迁移数据库 中已经创建了一个后台账户,但如果你没有按照前面的步骤创建账户的话,可以运行 python manage.py cre
追梦人物
2018/04/17
2.1K0
在 Django Admin 后台发布文章
Django之templatetags自定义标签和过滤器的使用
2、创建任意 .py 文件,如:myTag.py 3、myTag.py文件: from django import template from django.utils.safestring import mark_safe register = template.Library(); # register 不能改变
菲宇
2022/05/06
1.7K0
在django-admin中使用django-ckeditor
在最新学习python中,使用django搭建博客系统,管理后台直接使用django自带的admin模块,所以遇到富文本编辑的问题,经过查阅资料,发现了django-ckeditor这个小插件,下面小威就分享一点点来自小白的经验吧~
用户2619822
2022/06/10
1.6K0
在django-admin中使用django-ckeditor
Django 1.10中文文档-第一个应用Part7-自定义管理站点
目录[-] 开发第一个Django应用,Part7 本教程上接Part6。将继续完成这个投票应用,本节将着重讲解如果用Django自动生成后台管理网站。 自定义管理表单 通过admin.site.register(Question)注册了Question后,Django可以自动构建一个默认的表单。如果您需要自定义管理表单的外观和功能。你可以在注册时通过配置来实现。 现在先来试试重新排序表单上的字段。只需要将admin.site.register(Question)所在行替换为: # polls/admi
jhao104
2018/03/20
3.6K0
Django 1.10中文文档-第一个应用Part7-自定义管理站点
编程是一种思想,而不是敲代码
编程是一个先思考再编码的过程,思考是优于编码技能的,在思考过程中我们会考虑代码的可重用性、可靠性、更容易被他人理解,这时就会使用到设计模式让代码编写工程化,这篇文章整理了设计模式的六大原则。
新亮
2020/05/26
3750
编程是一种思想,而不是敲代码
如何修改django的app在admin中显示的名称
在django的开发中,很多时候我们希望app在admin中显示成我们想要的中文名,而不是显示默认的app_label名称。 比如我们有一个blog应用,在我们的blog app目录下面,默认会生成一个apps.py文件,类似:
小海怪的互联网
2019/09/25
3.4K0
如何修改django的app在admin中显示的名称
Django Admin后台管理
Django通过简单配置就可以实现数据模型的后台管理。一般管理界面是给系统管理员使用的,以完成数据的CURD。
菜菜cc
2022/11/15
2.8K0
Django Admin后台管理
Django3.2边学边记—Adimn站点管理
ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式
玖柒的小窝
2021/09/24
1.2K0
Django3.2边学边记—Adimn站点管理
什么在代码中要求我们使用LocalDateTime而不是Date?
在项目开发过程中经常遇到时间处理,但是你真的用对了吗,理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗?
用户1516716
2019/11/24
1.1K0
在非admin页面使用 Django Ueditor(二)
Django Ueditor的安装和在admin页面的使用请看,接下来的内容是基于这篇文章的环境进行的:使用 Django Ueditor 富文本编辑器(一),如果你按照下面的流程来做还有关于Ueditor的报错,很有可能是没有装好环境。。 总体流程 以文章模型为例 1、创建文章模型 2、创建该文章模型的Form 3、写个html界面 4、写个视图函数article(),并提供这个Form给前端渲染 5、写个路由,并配置好settings.py文件 具体实现过程 在app中: 1、创建文章模型 from D
benny
2020/04/23
7060
在非admin页面使用 Django Ueditor(二)
Django快速入门——投票程序(7) 自定义后台
通过admin.site.register(Question)注册Question模型,Django会创建默认的表单在后台显示。但有时需要自定义后台的显示,可以通过继承admin.ModelAdmin实现:
一只大鸽子
2023/09/02
2420
Django快速入门——投票程序(7) 自定义后台
Django3.2边学边记—Adimn站点管理
ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式
用户1503405
2021/09/27
1.3K0
django admin 美化
django admin 美化主题,采用layui 作为基本框架,改写大部分页面 说明 安装 pip install django-simpleui 升级 pip install django-simpleui --upgrade 克隆源码本地安装 git clone https://github.com/newpanjing/simpleuicd simpleui python setup.py sdist install 项目 settings.py 的INSTALLED_APPS 第一行加入 simp
小贝壳
2020/03/05
7620
点击加载更多

相似问题

如何让文本显示在顶部而不是侧面?

20

有没有一种方法可以在模型中表达Django管理设置,而不是admin.py?

41

有没有一种方法可以使对象始终位于显示列表的顶部?

20

有没有一种方法可以从底部而不是从顶部在RecyclerView中堆叠CardView?

228

Django admin DoesNotExist位于/admin/

100
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文