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

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

相关文章推荐

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

简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。预备知识-程序的内存分...

程序的内存分配:栈区(stack)堆区(heap)。。。(转载)

一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其    操...

栈和堆,stack和heap,以及程序的内存分配

stack,栈,准确来说,应该叫“堆栈”。 heap,堆。

C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。   ...

C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free .

内存分配方式 内存分配方式有三种: [1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。 [2] 在栈上创...

c++五种内存分配、堆与栈区别

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。     栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常...

C/C++内存分配原理(堆、栈、静态区)

一、预备知识—程序的内存分配  一个由C/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其  操作方式类似...
  • whuexe
  • whuexe
  • 2013年03月23日 19:04
  • 778

c++五种内存分配、堆与栈区别

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。   栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数...

C/C++编译程序的内存分配(栈,堆,全局区,文字常量区,程序代码区)

栈: 由程序自动分配和释放,非全局变量或静态变量,以及非malloc申请的空间,都在栈中。 堆: 由程序员申请的内存空间: malloc, 在堆中申请的内存需要自己释放,malloc与free成对 全...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++堆(head)、栈(stack)、内存分配
举报原因:
原因补充:

(最多只允许输入30个字)