进程和线程的限制

  默认情况下,一个线程的栈要预留1M的内存空间  
  而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程  
  但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。  
  你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。  
  如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。  
   
  即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制。  
  比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用的还是2GB。   

  如果是同一台机器内的话,能起多少线程也是受内存限制的。每个线程对象都要站用非页面内存,而非页面 内存也是有限的,当非页面内存被耗尽时,也就无法创建线程了。  
   
  如果物理内存非常大,同一台机器内可以跑的线程数目的限制值会越来越大。

 

前一段时间无意中发现了一个问题,堆栈溢出,记得方法是用来遍历文件夹的,传入是二叉树结构,方法递归调用,二叉树的child表示文件深度,brother表示同层文件,当我将一个目录下的文件添加到8000多个时,它出现了堆栈溢出,表面现象停在了realloc方法上,是realloc失败,当时还傻乎乎的去换成malloc。。。

 

发现递归挺好用,尤其是用在二叉树上,有时候会忽视堆栈是不是会溢出。以后用的时候得注意着点。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值