搜尋

首頁  >  問答  >  主體

linux 32和64 在2g内存运行中有什么影响

linux 32和64 在2g内存运行中有什么影响

巴扎黑巴扎黑2840 天前759

全部回覆(1)我來回復

  • ringa_lee

    ringa_lee2017-04-17 13:25:45

    根據Linux的記憶體管理機制,64位元的系統要比32位元的系統多佔用50%的內存,2G RAM的前提下,其他沒有任何區別,所以,在此前提條件下,最好安裝32位元系統,這樣可以空出更多的內存,以免過早使用swap分區造成大量i/o操作降低效能。

    64位元的程式永遠比32位元的程式要多佔內存,原因如下:
    1. 64位元的指標需要分配更多的記憶體空間(剛好是一倍,這個是硬性的)
    2. 64位元環境下struct在記憶體中對齊(alignment)需要更多空間,最壞的margin正好比32位元多100%的記憶體(見下例1),當然不多見,現在的編譯器和CPU指令已經優化的不錯了。
    3. 64位元的堆疊比32位元的堆疊需要更多的空間
    4. 還有,不再展開了。

    舉個例子,你就明白了:

    cstruct MyStruct1
    {
       char m_c;
       void *m_p;
       int m_i;
    };
    

    這個struct在32位元下是12位元組,在64位元下是24位元組。
    還有一個例子:

    cstruct MyStruct2
    {
       void *m_p;
       int m_i;
       char m_c;
    };
    

    這個struct在32位元環境下同樣是12位元組,但在64位元下是16位元組。
    這兩個struct在記憶體中影像比較如下:

    圖片是windows下的比較,linux也是一樣的,畢竟記憶體都是一樣的。我說多50%是個平均的估計值,如果編譯時不優化的話,多100%都有可能。

    回覆
    0
  • 取消回覆