簡體   English   中英

python read()和write()在大塊/內存管理中

[英]python read() and write() in large blocks / memory management

我正在編寫一些python代碼,在不同的點拼接大文件。 我在C中做了類似的事情,我分配了一個1MB字符數組並將其用作讀/寫緩沖區。 它非常簡單:將1MB讀入char數組然后將其寫出來。

但是使用python我假設它是不同的,每次我調用size(1M)的read()時,它將分配一個1M長的字符串。 並且希望當緩沖區超出范圍時,我們將在下一個gc傳遞中釋放。

python會以這種方式處理分配嗎? 如果是這樣,常量分配/解除分配周期在計算上是否昂貴?

我可以告訴python使用與C中相同的內存塊嗎? 或者python vm足夠智能自己做嗎?

我想我的目標是有點像在python中實現dd。

搜索站點docs.python.org以獲取readinto以查找適合您正在使用的Python版本的文檔。 readinto是一個低級功能。 它們看起來很像這樣:

readinto(b)將len(b)字節讀入bytearray b並返回讀取的字節數。

與read()一樣,可以向底層原始流發出多個讀取,除非后者是交互式的。

如果基礎原始流處於非阻塞模式,並且此刻沒有可用數據,則會引發BlockingIOError。

但不要過早擔心它。 Python以凶猛的速度分配和釋放動態內存,並且可能會在噪聲中丟失重復獲取和釋放微弱兆字節的成本。 請注意,CPython主要是引用計數,因此當它超出范圍時,您的緩沖區將立即“立即”回收。 至於Python每次是否會重復使用相同的內存空間,可能性不大但不確定。 Python沒有做任何事情來試圖強迫它,但取決於整個分配/釋放模式和系統C的malloc()/free()實現的細節,它不是不可能它將被重用;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM