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

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

C/C++中栈(stack)与堆(heap)的区别

栈(stack) 由编译器自动分配释放管理。局部变量及每次函数调用时返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。新被调用的函数在栈上为其自动和临时变量分配存储空间。 堆(heap...
  • seanchen88
  • seanchen88
  • 2016年11月29日 08:57
  • 442

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

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

c++中堆和栈的的区别(stack vs heap)

 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操...
  • hyqsong
  • hyqsong
  • 2014年12月18日 15:57
  • 2786

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

C++内存分配方式详解(堆、栈、自由存储区、全局/静态存储区和常量存储区)
  • duan19920101
  • duan19920101
  • 2016年03月26日 22:55
  • 3420

内存中的栈(stack)、堆(heap)和静态区(static area)的用法

栈(stack: 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;即声明的变量属于什么类型时,该变量都保存在栈(stack)空间里。堆(heap ...
  • sinat_34814635
  • sinat_34814635
  • 2017年12月03日 21:34
  • 116

C++中堆和栈(非数据结构的heap and stack)的完全解析

内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给...
  • u011581550
  • u011581550
  • 2016年09月10日 06:11
  • 395

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

stack,栈,准确来说,应该叫“堆栈”。 heap,堆。
  • Benjamin_Xu
  • Benjamin_Xu
  • 2014年08月03日 20:58
  • 1269

C++堆栈实现及拷贝构造函数的使用注意事项

/* ============================================================================ Name : 堆栈(堆...
  • aircherfjt
  • aircherfjt
  • 2014年03月06日 16:43
  • 1474

解释Java中内存中的栈(stack)、堆(heap)和静态存储区的用法

通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、...
  • xz_src
  • xz_src
  • 2017年06月22日 11:45
  • 879

Java中的堆栈API——Stack

Java中的堆栈API——Stack
  • wangshuxuncom
  • wangshuxuncom
  • 2015年04月16日 15:18
  • 2166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++堆(head)、栈(stack)、内存分配
举报原因:
原因补充:

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