いっぽんの猟銃のむこうに (DAIZOじいさんとGun)

ヌルめの技術メモとか。フリーランスやってます (http://acez.jp/)

SystemError: Objects/stringobject.c:3565: bad argument to internal function

gomiなのでPythonでメモリ上にがっつり乗っけるスクリプト書いたら見慣れないエラーで落ちた。

test.py
----
str = ""
while True:
    str += "a" * 1024 * 1024
    print len(str)
----

これをCentOS 5.6(64bit)上のPython 2.4.3とかで流すと

2144337920
2145386496
2146435072
Traceback (most recent call last):
  File "test.py", line 3, in ?
    str += "a" * 1024 * 1024
SystemError: Objects/stringobject.c:3565: bad argument to internal function

こんな感じで32bit = (2GB)付近で落ちる。だらしねえな


MBA上のPython 2.7.1とかDebian 64とかだと世界まるみえテレビ特捜部のレスキュー911のCMの後並の勢いで元気に走るので、多分2.4系だとstrは32bitとか何かしらの制限があるんじゃないかなーと思うんですが、いかんせんめんどくさくなったので他の方法でやりました。


そもそもそんなバカでかいファイルを全部オンメモリとかしちゃいけないですよね。。
富豪的だなー最近ー