2010-07-25 108 views
3

是否有可能在雪豹(64位計算機)上運行蟒一個32位編譯版本的單個過程出現由頂命令所看到消耗> 4GB的虛擬內存(說5.4GB)?運行32位編譯二進制文件的進程是否可以使用超過4GB的內存?

我做了file ...python看到二進制不是86,但它似乎是在消耗的內存5GB。

我的猜測是,(RPY)中使用的庫是「數據的mmap'ing塊,並且在內存中緩存被我的進程的內存佔用量下出現的。

或者,也許我還沒有證實,Python的二進制文件是32位。或者也許有一些32位/ 64位混合(libffi?)。

完全困惑。

+0

「看到二進制文件不是x86」 - 那它是什麼? x86 == 32位,x64 = 64位。 – 2010-07-25 19:21:00

+0

@Henk:其實,大多數消費者的CPU現在是x86_64的 - 的CPU支持64位*僅*和不支持32位(即64)是相當少見 – Daenyth 2010-07-25 19:46:46

+0

@Daen,我說的是二進制文件,以及最常見的他們的面額。 – 2010-07-25 19:55:28

回答

2

不,這實際上是不可能的。這並不能阻止操作系統的分配,因爲對齊和碎片可能導致的分配量比它可以使用的要多,也就是說,它可能會有整個頁面,而實際上並不是全部映射的。然而,對於任何進程實際使用超過4GB是不可能的,並且很可能遠遠低於內核空間。

+0

該限制大部分時間略超過3GB,程序的作者需要特別要求使用那麼多內存的能力(默認限制爲2GB)。這適用於Windows,不瞭解Linux。 – PeterK 2010-07-27 20:03:58

+0

@peterK:確切的限制並不重要。重要的是它在5.4 GB的南部。 – Puppy 2010-07-27 22:31:37

+0

我知道,只是想添加一些更多的信息。 – PeterK 2010-07-28 06:24:31

0

它是可能如果在該過程中使用某種瘋長/遠/擴展指針和映射數據的流入和outof因爲它需要它32位的地址空間,但是在該點它算不上32無論如何。 (Python絕對是而不是這樣做,所以@ DeadMG的答案几乎肯定是實際發生的事情。)

+0

首映CS4使用另一種方法,那就是加載另一個進程的內存4GB的每個,使整個程序可以訪問不亞於現有的物理內存 – 2013-09-02 05:34:35

+0

@LưuVĩnhPhúc,如果你這樣做,你必須有2.6GB和另一個進程與2.8GB(或沿着這些線),而不是一個5.4GB的進程。 (這是處理地址空間約束的好方法,但這裏並不真正適用。) – 2013-09-02 23:42:27

+0

當然,這是2個(或更多)單獨的進程,但他們正在使用一些進程互連在彼此之間傳輸日期。無論如何,Premiere cs5及以上版本都支持32位環境 – 2013-09-02 23:58:26