Linux每个进程的HEAP SIZE限制是多少

Linux每个进程的HEAP SIZE限制是多少,第1张

网上看到的分析:

32位意味着4G的寻址空间,Linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3G。当然,实际的空间大小收到物理存储器大小的限制。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。

可是经自己测试:

堆区最多开2G - 1大小空间

栈区能开1G多,当接近2G就会报错

[html] view plain copy print?

#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

}

对于64位Linux允许多达128个TB单个进程的虚拟地址空间,并且能够解决大约64 TB的物理存储器,但是受处理器和系统的限制。原话:64-bit Linux allows up to 128 TB of virtual address space for individual processes, and can address approximately 64 TB of physical memory, subject to processor and system limitations.只要你的机器有足够的内存统统可以给你放倒。连银河曙光都能放下你的机器肯定不在话下:)而理论值更高,一个64位的微处理器可寻址存储器16 EB(1TB=1024GB,1PB=1024TB,1EB=1024PB自己换算)。顺便说一下64位的windows企业服务器最大2TB内存。

1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M

2、通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8601538.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存