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