内存空间:
32位程序:内存空间不得超过4G,其中4G是最大unsigned int表示的范围(2^32-1),见下图。
64位程序:内存空间应该最大是(2^64-1)。
这从malloc函数的声明可以看出:
void* malloc (size_t size);
其中:size_t在64位下为int64,在32位下为int32。
栈空间:
Linux:
据说不能超过2MB,没有测试(TODO:待测试)。
在linux下可以使用 ulimits 命令查看。
Windows:
x86程序和x64程序都不得超过2G.
堆空间:
用户空间内的内存理论上都可以分配(硬件上受内存大小、虚拟内存大小限制)。
但是直接分配可能出错,因为有内存碎片的存在。
测试:
#include <iostream>
#include <limits.h>
using namespace std;
int main() {
int MB = 0;
while(malloc(1<<20)){
MB++;
}
cout << "Total " << MB << " MB" << endl;
return 0;
}
x86输出:Total 1898 MB
x64输出:Total 35612 MB
我的内存大小是16G,通过任务管理器观察,x64测试程序最高只达到12G左右,这存说明申请的35G内占用了虚拟内存空间(被交换到磁盘)。