栈大小和堆大小


先说结论:

  • 栈大小:VS中默认1M,ubuntu中默认8M
  • 堆大小:堆的话,理论上内存有多大,就可以建多大.但32位的程序在64位系统上运行的时候,一个进程的堆大小应该是不可以超过4G(虚拟地址空间大小为4G)的.

栈大小

linux下查看和修改:

ulimit -a #显示当前用户的栈大小

ulimit -s 32768 #将当前用户的栈大小设置为32M bytes

VS下

项目--属性--链接器--系统--堆栈保留大小

堆大小

堆大小是可以自己申请的,只要不超过内存都是可以的。但是可能会受到其他方面的限制。

其次,

  • 栈是为了线程的运行而服务的。每当一个函数被调用时,栈顶的一个block保留用于局部变量和程序数据。函数返回时,这个block被释放以便下一次函数调用时使用。栈采用LIFO的顺序来存储,最经常被保留的block往往是下一个被释放的block。这使得跟踪一个block的使用变得很简单。
  • 所以如果进程中有N个线程,默认情况下有N*1MB的栈预留空间和小于这个数字的实际使用空间。
  • 俗话说:一个进程一个堆,一个线程一个栈。也就是说栈是跟线程相关的,堆是跟进程相关。

 

参考链接:

1. https://blog.csdn.net/holybin/article/details/37344671

2. https://bbs.csdn.net/topics/390437318

3. https://www.cnblogs.com/zmlctt/p/3987181.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM