第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當(dāng)沒有分配任何新內(nèi)容時,Pypy 內(nèi)存使用量會增加

當(dāng)沒有分配任何新內(nèi)容時,Pypy 內(nèi)存使用量會增加

動漫人物 2021-06-04 18:50:57
我不確定這是否與其他 PyPy 內(nèi)存問題重復(fù),但在這里我將提供一個具體示例。from __future__ import divisiondef mul_inv(a, m):    """Modular multiplicative inverse, a^-1 mod m. Credit: rosettacode.org"""    m0 = m    x0, x1 = 0, 1    if m == 1: return 1    while a > 1:        assert m != 0, "a and m must be coprime"        q = a // m        a, m = m, a%m        x0, x1 = x1 - q * x0, x0    if x1 < 0: x1 += m0    return x1M = 1000000009L = 10**8bin2 = [0] * Lbin2[0] = 1for n in range(L-1):    bin2[n+1] = (bin2[n] * (4*n + 2) * mul_inv(n+1, M)) % M    if n % 10**5 == 0: print(n, bin2[n])print(bin2[:20])使用 python 3.6,程序最多使用 3-4 GB 并運行完成(Armin Rigo 的列表更改不會顯著改變這一點)。使用運行 PyPy 5.10.0 的 python 2.7.13,程序快速達到 8 GB(我有多少 RAM)并凍結(jié)。即使有g(shù)c.collect()調(diào)用,程序n也會在大約 3.5 * 10^7時耗盡內(nèi)存。這個內(nèi)存使用來自哪里?唯一的大內(nèi)存使用應(yīng)該初始化bin2為 10^8 int 列表。在假設(shè)所有局部變量mul_inv都被垃圾收集的情況下,沒有其他東西會增加內(nèi)存使用量。
查看完整描述

2 回答

?
呼如林

TA貢獻1798條經(jīng)驗 獲得超3個贊

糟糕,這是優(yōu)化整數(shù)列表的一個糟糕案例。問題是它以整數(shù)列表開始:


bin2 = [0] * L

這在內(nèi)部存儲為整數(shù)數(shù)組。它通常更緊湊,即使在這種情況下它不會改變?nèi)魏螙|西——因為在 CPython 上它是一個包含L相同 object 副本的列表0。


但問題是很快,我們將 a 存儲long在列表中。此時,我們需要將整個列表變成可以存儲任何內(nèi)容的泛型類型。但!問題是我們看到了 1 億個零,因此我們創(chuàng)建了 1 億個0對象。除了列表本身的 800MB 之外,這會立即產(chǎn)生 3 GB 的內(nèi)存壓力。


如果我們像這樣初始化列表,我們可以檢查問題是否不會發(fā)生,以便它確實包含 1 億次相同的對象:


bin2 = [0L] * L     # Python 2.x

bin2[0] = 1

也就是說,在您的示例中,您不需要列表首先包含 1 億個元素。您可以將其初始化為:


bin2 = [1]

并使用bin2.append(). 這讓程序啟動得更快,而且在開始時不會占用大量內(nèi)存。


請注意,PyPy3 仍然比 CPython3 使用更多的內(nèi)存。


查看完整回答
反對 回復(fù) 2021-06-09
?
蕪湖不蕪

TA貢獻1796條經(jīng)驗 獲得超7個贊

AFAICT 這里的問題是您將 long 分配給數(shù)組,盡管您是模數(shù),但 PyPy 似乎沒有注意到該數(shù)字仍然適合機器字。

我可以想到兩種方法來解決這個問題:

  1. 通過分配給該值bin2[n+1]通過int()。

  2. 使用array.array().

前者只影響 PyPy2,并導(dǎo)致在我的 Mac 上似乎穩(wěn)定的內(nèi)存占用為 ~800MB,而后者似乎穩(wěn)定在 ~1.4GB,無論我是在 PyPy2 還是 PyPy3 中運行它。

不過,我還沒有完全運行該程序,所以 YMMV ......


查看完整回答
反對 回復(fù) 2021-06-09
  • 2 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號