栈大小和堆大小

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

以上是关于栈大小和堆大小的主要内容,如果未能解决你的问题,请参考以下文章

栈和堆

栈内存和堆内存的区别

js栈和堆的区别

js栈内存和堆内存的区别

栈堆和拷贝

JDK常用数据结构