斛兵塘的博客

热爱技术,热爱分享!

C++堆(head)、栈(stack)、内存分配

程序的运行场所是内存,栈和堆是进程的虚拟内存中的两部分区域。
当程序被执行时,程序代码,你所创建的变量、常量等都会被压入栈空间里,栈是程序代码的执行区域。栈的内存地址是连续的且被一一记录,所以说当你创建了一个变量(比如int var = 1),我们就可以通过var这个变量来访问变量的内容。在这里,var就存放在栈中,它的地址已经默认被编译器计算好了,调用过程也不需要你涉及到有关地址的操作。更直观的感受是数组,数组里的元素在栈里面是连续排放的,相邻两个元素的地址相差1。
而堆是不同于栈的另一部分区域,系统会给每个程序分配一部分栈空间让他们能够运行起来,问题就是栈空间必然存在不够用的问题,而堆不属于程序,堆是独立的,是公用的。只要你new,就可以得到相应一部分的堆空间。
有栈,为什么用堆?
栈里面的东西有生命周期,说俗点就是变量作用域,你在函数内部创建一个变量,函数调用结束这个变量就没了。而堆里面的东西独立于你的程序,new之后,除非你delete掉,否则一直存在。
有什么要注意?
堆里面申请的东西,是随机分配的,不像栈里面的地址都已经计算好了。所以申请了堆空间之后一定要创建一个指针保存你所申请到的堆空间的地址。不然就找不到你申请的空间了。
堆空间的东西申请好,在用完之后一定要delet掉,以防止堆溢出。

阅读更多
个人分类: Qt&OpenGL
上一篇C++实例化对象和用动态内存分配实例化对象比较
下一篇__stdcall和__cdecl的区别
博主设置当前文章不允许评论。

没有更多推荐了,返回首页

关闭
关闭