在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{
....
}
但是我想要更多这个问题。
答案 0 :(得分:0)
主线程的堆栈大小由操作系统在进程创建时分配。在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