课程咨询 : 020-87532245 24小时热线:15622781509 咨询QQ:3061057839

广州C++培训 > 达内新闻 > 广州C++培训:明确区分堆与栈
  • 广州C++培训:明确区分堆与栈

    发布:广州C++培训      来源:达内新闻      时间:2016-11-22

  • 广州C++培训:明确区分堆与栈

    在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。

    首先,我们举一个例子:

    void f() { int* p=new int[5]; }

    这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小,然后调用operator ew分配内存,然后返回这块内存的首地址,放入栈中,他在VC6下的汇编代码如下:

    00401028 push 14h

    0040102A call operator new (00401060)

    0040102F add esp,4

    00401032 mov dword ptr [ebp-8],eax

    00401035 mov eax,dword ptr [ebp-8]

    00401038 mov dword ptr [ebp-4],eax

    这里,我们为了简单并没有释放内存,那么该怎么去释放呢?是delete p么?澳,错了,应该是delete []p,这是为了告诉编译器:我删除的是一个数组,VC6就会根据相应的Cookie信息去进行释放内存的工作。

    推荐文章

上一篇:广州C++培训:内存管理

下一篇:广州C++培训:堆和栈究竟有什么区别?

最新开班日期  |  更多

c++--零基础周末班

c++--零基础周末班

开班日期:4月15日

c++--零基础全日制班

c++--零基础全日制班

开班日期:4月15日

c++--免费训练营

c++--免费训练营

开班日期:4月15日

c++--高薪就业班

c++--高薪就业班

开班日期:4月15日

  • 网址:http://gz.c.tedu.cn     地址:广州市天河北五山路 141 号尚德大厦 627
  • 课程培训电话: 020-87532245 24小时热线:15622781509 咨询QQ:3061057839     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56