按照一个整型数据占4个字节来算, 2M内存用来开数组, 最大也就开个52万左右, 我们的测试开了1000万, 显然是要爆掉的. 那么问题来了, 难道我们的C语言, 就TM只能提供区区50来万的数组空间吗? 别说50万, 就是1千万, 也不一定完全 够用呀. 当然不是, 上面只是C语言分配内存的默认方法, 也是最简单的方法,...
一维数组能开到 4 9909 9039 (四亿多)二维数组能开到 2 2340 (两万多)这个数据是我在自己电脑上用codeblocks运行测试得到的结果如果数组大小稍微超过上面的两个数字不会报错,但是测试输出最后一位输出为空如果数组大小超过上面两个数字很多,例如五亿,那么会报错,无法编译成功看了一下这个数据,大概...
所以,只要系统内存剩余有多大,那么malloc和静态数组就可以开多大。不过,由于系统内存剩余量并非固定,而是由系统运行实际情况决定的,所以在编程中,一般不会使用过大的静态数组,或动态内存,以免出现运行不稳定的问题。
理论上在不同平台不同机器上都可能不同。如果是栈上的数组,最大就是栈的大小,一般是1MB~8MB。如果是堆上的数组,最大就是堆的大小,一般32位机器大约是4GB,64位机器就是4G个4GB。
(1)数组开大了,电脑内存不够你开这么大的数组。一般电脑能开的内存常见的有8G/16G/32G,因此数组大小不宜超过10^8.(注:一个int占用四个字节,longlong占用8个字节,也就是说10^9的int类型的数组占用4GB,这已经是十分危险的了)。有兴趣的读者可以尝试着写一个死循环不断开内存,然后打开资源管理器看着“已用内存...
这么大的数组炸栈是肯定的。栈内存一般而言由系统的约束和配置决定,一般来说默认的在1-8M每进程不等。linux和macosx一般可以用ulimit命令调节,但一般仍会受到操作系统的“硬限制”而不能想调多大调多大。关于系统栈:系统栈的目的,在于跟踪和追溯函数调用的历史。这里的函数尤其指每个函数都有功能上的意义,即打印出...
包括我们之前讲解的通讯录简易版我们并不能事先知道要添加的联系人个数,此时用数组去存储,很难确定开多大的数组,开大了浪费,开小了不够用. 为了解决这个尴尬的问题,c语言提供了一些可以申请内存空间的函数,这些函数被称为动态内存函数.malloc函数,calloc函数以及realloc函数. ...
由于数组申请的是连续存储空间,所以存在最大申请的限制,也就是说最大申请空间不能大于当前的栈空间 栈空间是可调的,默认的应该为1M,但是最大值也不会大于全部栈的总size 如果是动态申请的话(例如,动态数组,链表等),则和堆的大小有关系 ...
理论上没有限制,实际上,计算机有物理内存大小限制,整型数也有最大值的限制。想开大的数组,可以用动态分配。定态数组,作为全局量可以开得大。例如:include <stdio.h> int a[1001][1001]; // 全局量 main(){ a[1000][1000]=1000;printf("%d",a[1000][1000]);return 0;} 若放到 main...
2.3数组的元素 对于整型数组来说,我们可以很容易理解,数组内的元素就是对应类型的数字,但是对于字符数组来说,它的元素是有两种书写形式的: 一种是和整型数组一样的,使用单引号将字符一个一个的放入数组的大括号"{}"中; 还有一种形式就是通过双引号将多个字符直接赋值给数组。