検索

ホームページ  >  に質問  >  本文

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

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

巴扎黑巴扎黑2783日前715

全員に返信(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
  • キャンセル返事