【发布时间】:2009-02-21 10:41:40
【问题描述】:
GAE 有各种限制,其中之一是最大可分配内存块的大小为 1Mb(现在增加了 10 倍,但这不会改变问题)。限制意味着不能在 list() 中放置超过一定数量的项目,因为 CPython 会尝试为元素指针分配连续的内存块。拥有庞大的 list() 可能被认为是不好的编程习惯,但即使程序本身没有创建庞大的结构,CPython 也会在幕后维护一些。
似乎 CPython 正在维护单个全局对象列表或其他东西。 IE。具有许多小对象的应用程序倾向于分配越来越大的单个内存块。
第一个想法是 gc,禁用它会稍微改变应用程序的行为,但仍然保留了一些结构。
遇到此问题的最简单的简短应用程序是:
a = b = []
number_of_lists = 8000000
for i in xrange(number_of_lists):
b.append([])
b = b[0]
谁能告诉我如何防止 CPython 在应用程序中有许多对象时分配巨大的内部结构?
【问题讨论】:
-
真正的问题是什么。为什么内存不足很重要?您有什么具体问题似乎需要巨大的内存块?您可能可以首先解决该问题以不分配内存。您试图解决的真正问题是什么?
标签: python google-app-engine data-structures internals cpython