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

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

阅读 4.5k
1 个回答

根据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%都有可能呢。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题