广州C/C++培训
达内广州岗顶中心

18087159764

热门课程

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

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

广州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++培训:堆和栈究竟有什么区别?

广州达内:苹果AirPods与谷歌Pixel Buds小耳机对比

手机摄像头妙用方法大汇集

苹果冲向万亿市值的这个2017年

32GB内存条还自带64GB闪存

选择城市和中心
贵州省

广西省

海南省