一个进程能用的最大内存(堆区)空间大小为1G
2013-05-02 23:23
363 查看
网上看到的分析:
32位意味着4G的寻址空间,linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3G。当然,实际的空间大小收到物理存储器大小的限制。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。
可是经自己测试:
堆区最多开2G - 1大小空间
栈区能开1G多,当接近2G就会报错
32位意味着4G的寻址空间,linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3G。当然,实际的空间大小收到物理存储器大小的限制。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。
可是经自己测试:
堆区最多开2G - 1大小空间
栈区能开1G多,当接近2G就会报错
#include <iostream> #include <cstdio> #include <cstdlib> #include <string.h> const long long MAXN = 1073741824;//2^30即1G using namespace std; char s[MAXN * 2 - 1];//开2G内存,多1个都会编译错误(提示:整数溢出之类的错误) int main() { char t[MAXN + 1000];//之内开1G多的空间,2G会编译不通过 memset(t, 0, sizeof(t)); memset(s, 0, sizeof(s)); return 0; }
相关文章推荐
- 一个进程能用的最大内存(堆区)空间大小为1G
- windows 32位系统中进程最大可用内存空间为3GB
- 如何访问一个进程的内存空间
- windows 32位操作系统中,每个进程最大可用内存空间为3GB
- 如何访问一个进程的内存空间
- LINUX2.6内核中用户空间向驱动程序传递的内存大小最大为多少?
- ★实验 8-1 1. 创建一个守候进程。并为自己创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 未使用的内存大小(MemFree) 可以从/proc/meminf
- Delphi如何访问一个进程的内存空间
- 如何访问一个进程的内存空间
- windows 32位系统中进程最大可用内存空间为3GB (转)
- 如何计算一个结构体所占内存空间大小
- 访问一个进程的内存空间
- 如何访问一个进程的内存空间
- Linux系统下生成一个指定大小的文件和空间预留
- #defind 语句也可以定义绝对内存空间,用以指向一个固定的字
- 进程使用内存的大小控制
- 一个进程能够打开最大文件句柄数设到多大才合适(Linux) (转)
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
- 【表空间支持的最大数据文件大小的算法】【数据库限制】【数据文件文件头保留数据块数】
- Linux内存点滴 用户进程内存空间