私は、 FreebsdにPython文字列を使って奇妙なメモリ使用パターンを観察しています。次のセッションを と考えてください。リスト内の累積文字が100MBになるように、いくつかの文字列を保持するリストを作成することが考えられます。FreeBSDでのPython文字列のメモリ使用
l = []
for i in xrange(100000):
l.append(str(i) * (1000/len(str(i))))
これは、予想通りに約100MBのメモリを使用し、「del l」はそれをクリアします。
l = []
for i in xrange(20000):
l.append(str(i) * (5000/len(str(i))))
これは165MBのメモリを使用しています。私は実際に のメモリ使用量がどこから来ているのか分かりません。 [両方のリストのサイズは同じです]
FreeBSD 7.2のPython 2.6.4。 Linux/Windowsでは、両方とも約 の100MBメモリしか使用しません。
アップデート:私は 'ps aux'を使ってメモリを測定しています。上記のコードスニペットの後にos.sytemを使用して実行できます。これらは別々に実行されました。
Update2:freebsd mallocsのメモリは2の倍数に見えます。したがって、5KBを割り当てると、実際には8KBが割り当てられます。私は確信していません。
何まず最初のものを実行するコードの2番目の部分を実行してはどうですか?これは、オペレーティングシステム/ Pythonインタプリタとガベージコレクタがメモリをどのように管理しているかに関係しているので、もう一度165 MBになると思います。 – Hossein
どのように使用するメモリを決定しますか?それが正しいと確信していますか? – steabert