簡體   English   中英

堆棧上或BSS或DATA段上的數組最大大小

[英]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{
    ....
}

但我想要更多這個問題。

  1. 什么是最大數組大小? 我的意思是確切的價值。
  2. 什么會限制最大大小,對於堆棧,我認為答案是創建線程時的堆棧。 但是對於BSS,我真的不知道究竟是什么,限制它的大小,是否與線程(就像堆棧)或應用程序(如堆)相關聯?

主線程的堆棧大小由進程創建時的操作系統分配。 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM