堆栈或BSS或DATA段上的数组最大大小
array max size on the stack or on BSS or DATA segment
在C++中,我们都知道数组可以作为局部变量在"main"范围内:
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{
....
}
但是我想要更多的解决这个问题。
- 最大数组大小是多少?我指的是确切的价值
- 什么会限制最大大小,对于堆栈,我认为答案是创建线程时的堆栈。但对于BSS,我真的不知道它到底是什么,什么会限制它的大小,它与线程(就像堆栈)还是应用程序(就像堆)相关
主线程的堆栈大小由操作系统在进程创建时分配。在linux上,您可以使用命令"ulimit"来检查和更改它。获取当前流程创建限制的列表:
ulimit -a
在我的Linux x64上,默认值为:
stack size (kbytes, -s) 8192
如果您的程序创建了任何线程,每个线程的堆栈大小也将设置为默认值(在linux/phread上为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
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '