我需要在32位Linux计算机上创建尽可能大的数组。我的电脑可以处理的最大阵列大小是多少?是2 ^ 32吗?
答案 0 :(得分:3)
我认为它会在某个地方2 ^ 31和2 ^ 32,而不是更多,甚至可能更少(地址空间的一部分将被库和应用程序代码占用)。一个进程无法访问超过2 ^ 32个内存,而某些操作系统标记一半的地址空间用于特殊目的。不确定linux是否这样做。
指针的大小为32位,因此无论你做什么,都无法获得大于2 ^ 32的线性内存块。任何不是“线性内存块”的东西都不能称为数组。
答案 1 :(得分:2)
另外,如果我们假设这个数字大约是3GB(这似乎是合理的),那么你还必须记住整数是4个字节:给你最多3G / 4 =大约7.5亿整数
当然,还有一个事实是,如果你已经分配了3GB的数组,那么你将不会留下任何其他地址空间!
我的个人建议是,如果您计划使用大型数字数组,则使用内存映射文件(在Linux上,这是使用mmap完成的)并且只将文件的一小部分映射到一次记忆(比方说,100MB)。这意味着您可以处理任何大小的数据集,和您不会耗尽地址空间。
答案 2 :(得分:0)
Is there a max array length limit in C++?
有2个限制,物理内存,但忽略它,它应该是(2 ^ 32)-1,因为没有其他任何东西正在进行,就像你被物理内存限制一样,你的程序仅限于允许的程序。