[英]array max size on the stack or on BSS or DATA segment
在C ++中,我們都知道數組可以作為局部變量在“主”范圍內:
int main(){
int arr[10000]; //on the stack, size can't be very large
....
}
或者作為全局變量的“主”范圍:
int arr[10000000]; //on BSS, sie can be very large
int main{
....
}
但我想要更多這個問題。
主線程的堆棧大小由進程創建時的操作系統分配。 在linux上,您可以使用命令'ulimit'檢查並更改它。 要獲取當前流程創建限制的列表:
ulimit -a
在我的Linux x64上,默認為:
stack size (kbytes, -s) 8192
如果你的程序創建了任何線程,每個線程的堆棧大小也會設置為默認值(linux / pthread上為2048k),您可以使用以下函數進行更改:
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
對於BSS大小,限制是您的進程可以訪問的虛擬內存量:32位機器上1.5-2g,64位機器上大約2 ^ b。 請注意,'b'不一定是64:
cat /proc/cpuinfo
在我的舊服務器上給出:
address sizes : 36 bits physical, 48 bits virtual
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.