取决于物理系统剩余内存大小。
在C语言中,malloc动态开辟的空间,以及静态数组均是占用堆上的内存的。
而系统堆内存是与进程无关的,堆内存的剩余量,就是系统内存的剩余量,包括物理内存和虚拟内存。
所以,只要系统内存剩余有多大,那么malloc和静态数组就可以开多大。
不过,由于系统内存剩余量并非固定,而是由系统运行实际情况决定的,所以在编程中,一般不会使用过大的静态数组,或动态内存,以免出现运行不稳定的问题。
其实malloc函数来说的话,应该是能开到 剩余内存+虚拟内存的大小。但是你一般不需要用到这么大的内存,所以用malloc函数而言是绝对足够的。
另外C的话静态数组一般是1000000*int 字节。主要看你系统的内存环节。
静态数组最多能开到2K字节,相当于1024个整数。
malloc开辟的动态数组容量则与机器的内存总容量和当前占用的内存容量有关系。
其实静态数组和动态数组都要占用内存,只是静态数组占用的是程序的栈区,栈区一般只有2KB,而动态数组则没有容量限制,但是已经占用的内存不能开辟动态空间。
语法上没有规定最大。
计算机用虚拟存储,也就是存储器里RAM里放不下时,就写到磁盘里去,要用的数据块从磁盘里读进来,不用的数据块,放到盘里。利用倒进倒出,多大的数组都可以,只是程序执行效率变低了。
三维图形动态显示,常要很大的数组,高效率的显示卡(硬件)会带额外的RAM。
理论上说,只要不超过硬件许可,开多大都可以。实际上,有限制。
我的计算机,这个可以:
#include
int a[1000000]; // 全局量,允许比较大的数组
int main(){
a[999999]=999999;
printf("%d ",a[999999]);
return 0;
}
若int a[1000000]; 放到main()里,就不行了。
---
C语言无符号整型数有最大限制,所以一个维的大小,不能超过整型数最大限制。
malloc 动态分配,可以测定,分配是否成功。