时间:2021-05-20
简介
栈(stack),先进后出,位于一级缓存中,操作系统自动分配释放 ,存放函数的参数值,局部变量的值等,被调用时处于存储空间中,调用完毕立即释放。
堆(heap),堆包含一个链表来维护已用和空闲的不连续的内存块,存放在二级缓存中,一般由程序员分配释放。
快速记忆方式:
一级缓存比二级缓存快,栈是一个先进后出列表,存取非常快,所以栈是在一级缓存中。
栈中不能随机取数据,只能取最上面的一个,存放的内容必然要有严格的存取顺序,所以适合函数调用时的形参、局部变量。
栈空间有限,一般PC一级缓存就几M,所以其中的数据也是快速使用,快速删除。像形参、局部变量,在函数调用结束系统就会把数据主动销毁了。
堆空间大,由程序员维护,系统不会主动销毁。
示例代码如下:
#include <iostream>using namespace std;class TestNew{private: int ID;public: TestNew(int ID); ~TestNew();};TestNew::TestNew(int ID){ this->ID = ID;}TestNew::~TestNew(){ std::cout<<"对象 "<<this->ID<<" 执行析构函数"<<std::endl;}void Test(){ TestNew test(1);//创建对象1,不使用new,存储在栈中 TestNew *pTest = new TestNew(2);//创建对象2,使用new,存储在堆中 //delete pTest;}int main(){ Test();//这个地方有点问题,pTest没有进行处理,会导致内存泄露,实际应用中要注意呀}输出结果:
对象 1 执行析构函数
说明函数调用结束,对象1被系统主动销毁了。
如果把Test()方法中,delete前的注释去掉。
输出:
对象 2 执行析构函数
对象 1 执行析构函数
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java中对象与C++中对象的放置安排的对比概要:Java中,所有的对象都存放在堆(Heap,一种通用的内存池)中;而对象的引用是存放在堆栈(Stack)中的。
c++中,临时对象一旦不需要,就会调用析构函数,释放其占有的资源;而具名对象则是与创建的顺序相反,依次调用析构函数。c++源码:复制代码代码如下:classX{
本文实例讲述了C++实现动态分配const对象的方法。分享给大家供大家参考。具体方法分析如下:一、创建在C++中,允许动态创建const对象,格式如下:cons
C/C++函数参数传递机制详解及实例概要:C/C++的基本参数传递机制有两种:值传递和引用传递,我们分别来看一下这两种的区别。(1)值传递过程中,需在堆栈中开辟
我们都知道C++中有三种创建对象的方法,如下:复制代码代码如下:#includeusingnamespacestd;classA{private:intn;pu