你好,感謝你的提問,剛好前段時間我也遇到過Python內存溢出的情況。我把我的例子與你分享,希望對你有所幫助。
內存溢出的情況:你使用malloc或new向內存申請了一塊內存空間,但沒有用free以及delete對該塊內存進行釋放,造成程序失去了對該塊內存的控制。
我的處理辦法是:
在原生的編譯器中,如果進行如下定義
a=1000
b=1000
printid(a),id(b)
會發現,兩個的結果是不同的。id()是用來查看對象的內存地址的,如果我們定義大量的int變量,就有了內存溢出的可能性。
查了下,python對于小整數對象,[-5,257),是預分配內存地址的。如果超出這個范圍則使用通用的緩沖池,對于大整數則有PyIntBlock,用來作緩沖池。所以出現了我們上述的現象。
對int類變量值相同的情況,如果使用a=b=1000來定義,id(a)和id(b)的內存地址就是同一個了,可以一定程度上降低溢出的可能。
非原生的編譯器中,貌似對上述情況進行過優化。在eclipse中測試,同樣值,通常都是同一個內存地址。