84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
linux 32和64 在2g内存运行中有什么影响
根據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; };
c
struct 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 MyStruct2 { void *m_p; int m_i; char m_c; };
這個struct在32位元環境下同樣是12位元組,但在64位元下是16位元組。 這兩個struct在記憶體中影像比較如下: 圖片是windows下的比較,linux也是一樣的,畢竟記憶體都是一樣的。我說多50%是個平均的估計值,如果編譯時不優化的話,多100%都有可能。
根據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. 還有,不再展開了。
舉個例子,你就明白了:
這個struct在32位元下是12位元組,在64位元下是24位元組。
還有一個例子:
這個struct在32位元環境下同樣是12位元組,但在64位元下是16位元組。
這兩個struct在記憶體中影像比較如下:
圖片是windows下的比較,linux也是一樣的,畢竟記憶體都是一樣的。我說多50%是個平均的估計值,如果編譯時不優化的話,多100%都有可能。