棧大小和堆大小


先說結論:

  • 棧大小: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