Java和C C++ 在内存分配方式上的不同

Java中,基本类型是直接存储值的,放在内存的栈中存储。存储在栈中的数据,需要有固定的大小和生命周期。因为栈中的内存分配方式是向下增长的,栈顶指针向下移动,就会分配内存(压栈);向上移动,就会释放内存(弹栈)。如果一直压栈,当栈内存不足时,就会发生栈溢出。所以Java中基本数据类型和对象的引用是存放在栈中的。并且基本数据类型的大小不会根据机器硬件架构的变化而变化,保证了固定大小。基本类型变量或者引用都有作用域,保证了固定的生命周期。

在C和C++中,数组就是内存块。如果一个程序要访问数组之外的内存块,就会发生异常。Java中解决的方法是:Java确保数组会被初始化,如果不是存放基本类型,数组中实际存放的是引用,每个引用都被初始化为null,Java一旦看到null,就知道这个引用还没有指向某个对象,也就不允许访问这个引用,也就保证了不会访问到申请数组之外的内存。对于数组中存放的是基本类型,编译器会将这种数组的所占内存全部置0,也就是初始化。

猜你喜欢

转载自blog.csdn.net/wanderlustLee/article/details/83146496