translation.backendopt.mallocs

  • 名称: mallocs
  • 描述: 删除 mallocs
  • 命令行: –translation-backendopt-mallocs
  • 命令行否定: –no-translation-backendopt-mallocs
  • 选项类型: 布尔选项
  • 默认值: True

此优化启用“malloc 删除”,它将“展开”在分配它们的函数中不会逃逸的结构的分配,变成一个或多个额外的局部变量。

举个例子。考虑这段看似不太可能的代码

class C:
    pass
def f(y):
    c = C()
    c.x = y
    return c.x

Malloc 删除会发现 C 对象永远不会离开 f,并将上面的代码替换为类似这样的代码

def f(y):
    _c__x = y
    return _c__x

代码很少直接以允许此优化发挥作用的方式编写,但内联通常会导致使用它的机会(实际上,这是 PyPy 进行自己的内联而不是依赖 C 编译器的主要原因之一)。

有关此优化和其他优化的更多信息,您可以阅读“大规模并行和翻译方面”技术报告的第 4.1 节,您可以在 技术报告页面 上找到。