先說結論:
- 棧大小: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