这篇文章主要介绍了java中对象与c++中对象的放置安排的对比的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
java中对象与c++中对象的放置安排的对比
概要:
java中,所有的对象都存放在堆(heap,一种通用的内存池)中;而对象的引用是存放在堆栈(stack)中的。
我们可以通过string直接声明的字符串与new string声明出来的字符串使用equals()和==进行的比较,从而理解对象和引用的关系及它们的存储位置。
堆栈是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。
堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。所以,堆比堆栈更加灵活。
java中的堆栈并不能简单理解为数据结构中的栈,虽然它们的英文都是stack。java中的堆栈是位于通用ram(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。
具体的java的内存分配请详见《thinking in java》p22页。
c++中:只要使用了new和malloc关键字声明的对象,都是存放在堆中的,而malloc关键字也是对堆内存进行操作的:
a a(1);//栈中分配
a b = a(1);//栈中分配
a *c = new a(1);//堆中分配内存空间,将在堆中所创建的对象存储地址赋值给c指针
a *d = (a*)malloc(sizeof(a));//堆中分配内存空间
delete c;
以上就是java与c++两者中的对象放置安排的对比的详细内容。