算是写给自己看的吧~~
首先这个是我在大一的时候编程的时候发现的,在编译其中,你如果声明一个
int a[1000000](或者是更大,这个得看编译器了)
编译器是回报错的,说是overflow的,当时也没注意为什么,所以就用的malloc或者是new函数
int * a = (int *)malloc(1000000)这样就行了((int *)的作用是把malloc的返回的void *指针转换为int *)
int * a = new int[1000000]这样也行
为什么呢?
这个就要涉及到这些数据在内存中的存储方式了,在刚开始main函数中声明的数组和局部变量是存储在栈上的,由编译器自己管理的,编译器的栈大小一般是1M或者是2M,是向低地址扩展的,是固定的,不可能存放100W个Int型数据,所以不行。
但是malloc和new是由程序猿自己分配的,分配在堆上,堆是向高地址扩展的,是不连续的,所以大小可以很大,100M个不成问题啊,所以这个可以
好了,问题解决了,算是回忆一下自己的大一吧
PS:栈是编译时确定,堆是运行时确定,所以栈的速度比堆快