C定义变量时是怎样分配内存得?是在定义时还是在初时化时?java数组得内存分配是在什么时候?

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:53:00
请以如下例子详解:
c: int i;i=0;
java:int []array1;
int []array2={1,2,3};
array1=new int[3];
array[0]=......
..........
是不是这样:对于C,编译过程中,在变量被定义时依其类型分配一定空间。而对于java,声明变量并不得到空间,解释到初始化语句,变量才得到相应得空间?对于数组呢?
C语句: int array[];对于这个定义数组的语句,是无法分配空间的,我们无法知道元素个数,而int array[]={0};和int array[5]={0};从空间分配的角度分别怎样理解?是不是不合法的对于int array[]={0};??

定义的时候,在初始化之前这个内存里的数是随机的。
用 new 来分配的时候是在运行的时候,

C语言里,未赋值的全局变量是被放在bss段,赋值的全局变量被放在data段,他们都是在运行前就被分配的,bss段会被清零。局部变量建立在线程的栈上,在离开局部变量生存期后空间就可以被复用。所谓的new/delete并非真的创建出新的内存,不过是向内存管理模块申请和释放了一段空间,通常的内存管理模块从系统的堆中分配。
Java运行在虚拟机空间,所以其内存的分配是由虚拟机来完成的,通常的虚拟机在初始化时,已经分配的一定的内存空间,所谓的创建与析构,以及垃圾回收,都是针对该内存空间进行的。