当前位置: 技术问答>linux和unix
进程启动后分配的“堆”有多大?
来源: 互联网 发布时间:2015-12-21
本文导语: 32位机器上逻辑地址有4G,是不是全部都可以用? 那为什么sbr系统调用还可以增加进程的堆呢? | 用户的地址空间是2G,堆栈大小还受ulimit限制: ulimit -a 可以看到是否限制。 局部变量分配在...
32位机器上逻辑地址有4G,是不是全部都可以用?
那为什么sbr系统调用还可以增加进程的堆呢?
那为什么sbr系统调用还可以增加进程的堆呢?
|
用户的地址空间是2G,堆栈大小还受ulimit限制:
ulimit -a
可以看到是否限制。
局部变量分配在栈中,堆栈用的是同样地址空间,只不过增长方向不一样。
你不妨写一个小程序测试一下,比如下面这个用递归调用来测试堆栈大小:
#include
int test(int n) {
char buffer[1024];
printf(">>>>> n=%dn", n);
if(n>>> n=938957
>>>>> n=9389Killed
可以看出,有将近1G的堆栈被分配。
我的机器有512M内存和512M swap,显然,如果没有其他限制,堆栈大小只跟内存大小有关。
ulimit -a
可以看到是否限制。
局部变量分配在栈中,堆栈用的是同样地址空间,只不过增长方向不一样。
你不妨写一个小程序测试一下,比如下面这个用递归调用来测试堆栈大小:
#include
int test(int n) {
char buffer[1024];
printf(">>>>> n=%dn", n);
if(n>>> n=938957
>>>>> n=9389Killed
可以看出,有将近1G的堆栈被分配。
我的机器有512M内存和512M swap,显然,如果没有其他限制,堆栈大小只跟内存大小有关。
|
windows下进程默认一个线程stack是1M,linux下是10M,此值可修改,用ulimit修改系统限制