zoukankan      html  css  js  c++  java
  • 内存中的堆和栈

    参考:

    堆栈入门——堆和栈区别
    http://www.51hei.com/bbs/dpj-37256-1.html
    (出处: 单片机论坛)

    以下当做是自己的笔记

    堆和栈都是一种数据项按序排列的数据结构。      

    我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。

    堆区与栈区

    内存分配中的堆和栈,一般情况下程序存放在Rom或Flash中,运行时需要拷到内存中执行,内存会分别存储不同的信息。内存中的栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的,栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。另外还有静态区是分配静态变量,全局变量空间的;只读区是分配常量和程序代码空间的;以及其他一些分区。

     1 来看一个网上很流行的经典例子:
     2 main.cpp
     3   int a = 0; 全局初始化区
     4   char *p1; 全局未初始化区
     5   main()
     6   {
     7   int b; 栈
     8   char s[] = "abc"; 栈
     9   char *p2; 栈
    10   char *p3 = "123456"; 123456/0在常量区,p3在栈上。
    11   static int c =0; 全局(静态)初始化区
    12   p1 = (char *)malloc(10);  堆
    13   p2 = (char *)malloc(20);  堆
    14   }
  • 相关阅读:
    集合赋值及for循环删除符合条件的元素
    shiro系列12:rememberme(记住我)
    shiro系列11:缓存
    shiro系列10:会话管理
    shiro系列8:授权源码解析
    shiro系列7:拦截器
    shiro系列6:授权
    shiro系列5:Realm
    shiro系列4:认证源码解析
    shiro系列3:MD5盐值加密认证流程
  • 原文地址:https://www.cnblogs.com/perl2py/p/7015781.html
Copyright © 2011-2022 走看看