堆和栈空间大小和作用

win系统默认的栈空间是1M(1MiB)大小,而Linux默认下栈空间常见的是8M或10M。不同系统的栈空间默认大小不同是由系统和(或)编译器决定的(编译器占主要作用),而具体的情况要具体的分析。我见过有文章认为x86/x64体系架构的系统默认栈空间大小是1M,而安腾系列默认4M,对此我个人表示不能赞同。栈和堆都是在可用内存空间之中分配的,而硬件上的内存应该是完全一样的,也就是说栈可以分配到硬件内存上的低地址,也可以分配到某个中间段地址或高地址,而不是由硬件支持的;硬件支持的在我的知识中只有寄存器了,寄存器速度是快于内存,但价格要高于内存,它是稀缺的资源,需要特殊考虑的。而堆的速度慢于栈,更多的是跟操作系统设计有关(应该没判断错)。下面是我总结的一些要点了


  1. 一个进程一个堆,一个线程一个栈(这仅是笼统、粗略地从进程线程堆栈的区别上讲的)
  2. win系统默认栈大小是1M,linux常见默认的栈大小是8M或10M(通过ulimit -s查看;不同linux发行版的命令不保证相同)
  3. 所有系统的堆空间上限是接近内存(虚拟内存)的总大小的(一部分被OS占用)
  4.  

Linux系统查看栈空间大小

1.使用ulimit -s查看栈大小,单位是KB

2.使用ulimit -a可以查看当前所有限制情况,其中一列写着stack size即为栈空间大小(此处需要补一张-a图片

3.ulimit 指令参数如下

-H 设置硬资源限制.
-S 设置软资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
-u <程序数目>  用户最多可开启的程序数目


Linux系统设置栈空间大小

1. ulimit -s 临时改变栈空间大小:ulimit -s 1024,单位是KB

2. 在/etc/rc.local文件加入 ulimit -s 1024 在系统启动时开机设置栈空间大小

3. 修改文件/etc/security/limits.conf改变栈空间大小:

#<domain> <type> <item> <value>

* soft stack 1024


在此推荐一篇文章:关于堆栈的讲解(我见过的最经典的)

保留链接:https://blog.csdn.net/yingms/article/details/53188974?utm_source=blogxgwz2

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值