栈大小和堆大小
Posted lfri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈大小和堆大小相关的知识,希望对你有一定的参考价值。
先说结论:
- 栈大小: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
以上是关于栈大小和堆大小的主要内容,如果未能解决你的问题,请参考以下文章