ire*_*ses 5 python memory compiler-construction jit psyco
Psyco可以并且将使用大量内存.
这种内存使用的主要原因是什么?大量内存开销一般是JIT编译器的一个特性吗?
编辑:感谢您的答案到目前为止.有三种可能的竞争者.
问题是,哪一个是内存使用的主导因素?我有自己的看法.但我正在增加赏金,因为我想接受实际上正确的答案!如果有人能证明或证明大部分内存的使用位置,我会接受它.否则,社区投票的任何人都将在赏金结束时自动接受.
小智 10
来自psyco网站"与JIT编译器的传统方法的不同之处在于Psyco编写了相同块的几个版本(一个块有点像一个函数),它们通过专门用于某些变量来优化(一种"类型")可以指一种类型,但它更通用)"
"Psyco使用程序操作的实际运行时数据来编写可能的几个版本的机器代码,每个版本都针对不同类型的数据进行了不同的专用." http://psyco.sourceforge.net/introduction.html
许多JIT编译器使用静态类型语言,因此他们知道类型是什么,因此只能为已知类型创建机器代码.如果类型是多态的并且优化更常见的路径,则更好的进行动态分析; 这通常也适用于具有动态类型†的语言.Psyco似乎对冲其赌注,以避免进行完整的程序分析以确定类型可能是什么,或分析以找出使用的类型.
†我从来没有深入到Python中去弄清楚它是否有动态类型(在使用该类型创建对象后可以在运行时更改其结构的类型),或者仅仅是常见的实现在运行时检查类型; 大多数文章都只是关于动态类型,而没有在Python的上下文中实际定义它.
目前Psyco的内存开销较大。随着时间的推移,我已经减少了一些,但这仍然是一个开销。该开销与 Psyco 重写的 Python 代码量成正比;因此,如果您的应用程序有一些算法“核心”函数,那么您将希望 Psyco 加速这些函数,而不是整个程序。
所以我认为大量的内存需求是由于它将源代码加载到内存中然后对其进行编译的事实。您尝试编译的源代码越多,所需的源代码就越多。我猜想,如果它试图在此基础上进行优化,它会考虑多种可能的解决方案来尝试确定最佳情况。
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |