Heim > Fragen und Antworten > Hauptteil
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. 还有,不再展开了。
举个例子,你就明白了:
c
struct MyStruct1 { char m_c; void *m_p; int m_i; };
这个struct在32位下是12字节,在64位下是24字节。
还有一个例子:
c
struct MyStruct2 { void *m_p; int m_i; char m_c; };
这个struct在32位环境下同样是12字节,但在64位下是16字节。
这两个struct在内存中图像比较如下:
图片是windows下的比较,linux也是一样的,毕竟内存都是一样的。我说多50%是个平均的估计值,如果编译时不优化的话,多100%都有可能呢。