草庐IT

linux - 获取关于段错误或崩溃的指令指针(针对 x86 JIT 编译器项目)?

我正在为生成x86代码的JavaScriptJIT编译器实现后端。有时,由于错误,我会遇到段错误。很难追溯是什么原因造成的。因此,我一直想知道是否有一些“简单”的方法来捕获段错误和其他此类崩溃,并获取导致错误的指令的地址。这样,我就可以将地址映射回已编译的x86程序集,甚至可以映射回源代码。这需要在Linux上运行,但最好在任何POSIX兼容系统上运行。在最坏的情况下,如果我无法捕获段错误并在运行的JIT中获取IP,我希望能够将其捕获到外部(内核日志?),也许只是让编译器转储一个大文件将地址映射到指令,我可以将其与Python脚本或其他东西相匹配。任何想法/建议都将受到赞赏。如果您曾经

java - Java中的JIT编译是如何将动态编译好的指令加载到内存中的?

在Java中,JVM(例如HotSpot)能够进行JIT编译,这种技术用于通过将字节码编译为native代码来加快执行速度。我的问题是,这在技术上是如何发生的?我的理解是,现代处理器将内存区域标记为只读部分和可执行部分,以防止执行恶意代码。因此,JVM无法真正将新的“可执行代码”写入它有权访问的内存空间(即自修改代码)。因此,我猜测JVM会生成native代码,将其写入文件,然后使用操作系统服务将native代码动态加载到内存中,并维护一些native代码(函数)位置地址的内部映射表在操作系统加载此动态代码后在内存中,以便它可以分支到那些native指令。我确实看到了这个答案:Howi

java - Java中的JIT编译是如何将动态编译好的指令加载到内存中的?

在Java中,JVM(例如HotSpot)能够进行JIT编译,这种技术用于通过将字节码编译为native代码来加快执行速度。我的问题是,这在技术上是如何发生的?我的理解是,现代处理器将内存区域标记为只读部分和可执行部分,以防止执行恶意代码。因此,JVM无法真正将新的“可执行代码”写入它有权访问的内存空间(即自修改代码)。因此,我猜测JVM会生成native代码,将其写入文件,然后使用操作系统服务将native代码动态加载到内存中,并维护一些native代码(函数)位置地址的内部映射表在操作系统加载此动态代码后在内存中,以便它可以分支到那些native指令。我确实看到了这个答案:Howi

c++ - 将 LLVM JIT 代码链接到静态 LLVM 库?

我正在实现一个跨平台(MacOSX、Windows和Linux)应用程序,该应用程序将对财务数据进行大量CPU密集型分析。出于速度原因,大部分分析引擎将用C++编写,用户可访问的脚本引擎与C++测试引擎交互。随着时间的推移,我想编写几个脚本前端来模拟其他流行的软件,并拥有大量的用户群。第一个方面将是类似VisualBasic的脚本语言。我认为LLVM非常适合我的需求。由于数据量巨大,性能非常重要;运行一次测试可能需要数小时或数天才能得到答案。我相信使用LLVM还可以让我使用单一的后端解决方案,同时随着时间的推移为不同风格的脚本语言实现不同的前端。测试引擎本身将与界面分离,测试甚至会在单

c++ - 将 LLVM JIT 代码链接到静态 LLVM 库?

我正在实现一个跨平台(MacOSX、Windows和Linux)应用程序,该应用程序将对财务数据进行大量CPU密集型分析。出于速度原因,大部分分析引擎将用C++编写,用户可访问的脚本引擎与C++测试引擎交互。随着时间的推移,我想编写几个脚本前端来模拟其他流行的软件,并拥有大量的用户群。第一个方面将是类似VisualBasic的脚本语言。我认为LLVM非常适合我的需求。由于数据量巨大,性能非常重要;运行一次测试可能需要数小时或数天才能得到答案。我相信使用LLVM还可以让我使用单一的后端解决方案,同时随着时间的推移为不同风格的脚本语言实现不同的前端。测试引擎本身将与界面分离,测试甚至会在单

python - Python 3 解释器是否具有 JIT 功能?

我发现,当我向Python提出更多要求时,python并没有100%使用我的机器资源,而且速度不是很快,与许多其他解释语言相比,它很快,但与编译语言相比,我认为差别真的很大。是否可以在Python3中使用即时(JIT)编译器来加快速度?通常,JIT编译器是唯一可以提高解释语言性能的东西,所以我指的是这个,如果有其他解决方案,我很乐意接受新的答案。 最佳答案 首先,Python3(.x)是一种语言,可以有任意数量的实现。好的,直到今天,除了CPython之外,没有任何实现实际上实现了这些版本的语言。但这会改变(PyPy正在迎头catc

python - Python 3 解释器是否具有 JIT 功能?

我发现,当我向Python提出更多要求时,python并没有100%使用我的机器资源,而且速度不是很快,与许多其他解释语言相比,它很快,但与编译语言相比,我认为差别真的很大。是否可以在Python3中使用即时(JIT)编译器来加快速度?通常,JIT编译器是唯一可以提高解释语言性能的东西,所以我指的是这个,如果有其他解决方案,我很乐意接受新的答案。 最佳答案 首先,Python3(.x)是一种语言,可以有任意数量的实现。好的,直到今天,除了CPython之外,没有任何实现实际上实现了这些版本的语言。但这会改变(PyPy正在迎头catc

java - 在某些表达式中,JIT 能否将两个 volatile 读取合并为一个?

假设我们有一个volatileinta.一个线程可以while(true){a=1;a=0;}另一个线程可以while(true){System.out.println(a+a);}现在,JIT编译器发出对应于2*a的程序集是否违法?而不是a+a?一方面,volatile读取的真正目的是它应该始终从内存中读取。另一方面,两次读取之间没有同步点,所以我看不出处理a+a是非法的。原子地,在这种情况下,我看不到诸如2*a之类的优化如何会打破规范。引用JLS将不胜感激。 最佳答案 简短的回答:是的,这种优化是允许的。折叠两个顺序读取操作会产

java - 在某些表达式中,JIT 能否将两个 volatile 读取合并为一个?

假设我们有一个volatileinta.一个线程可以while(true){a=1;a=0;}另一个线程可以while(true){System.out.println(a+a);}现在,JIT编译器发出对应于2*a的程序集是否违法?而不是a+a?一方面,volatile读取的真正目的是它应该始终从内存中读取。另一方面,两次读取之间没有同步点,所以我看不出处理a+a是非法的。原子地,在这种情况下,我看不到诸如2*a之类的优化如何会打破规范。引用JLS将不胜感激。 最佳答案 简短的回答:是的,这种优化是允许的。折叠两个顺序读取操作会产

java - 拥有大量小方法是否有助于 JIT 编译器优化?

在最近关于如何优化某些代码的讨论中,有人告诉我,将代码分解成许多小方法可以显着提高性能,因为JIT编译器不喜欢优化大方法。我对此不确定,因为JIT编译器本身似乎应该能够识别自包含的代码段,无论它们是否在自己的方法中。谁能证实或反驳这一说法? 最佳答案 HotspotJIT仅内联小于某个(可配置)大小的方法。所以使用更小的方法允许更多的内联,这很好。查看thispage上的各种内联选项.编辑稍微详细一点:如果一个方法很小,它将被内联,因此很少有机会因将代码拆分为小方法而受到惩罚。在某些情况下,拆分方法可能会导致更多的内联。示例(如果您