zoukankan      html  css  js  c++  java
  • 堆栈的小理解

    程序运行的时候需要为程序的每一部分开辟内存空间来存放。

    可具体分为五个部分:

    1. 栈:存放的是函数的参数值,局部变量的值,编译器自动分配和释放。
    2. 堆:存放的内容由程序员自己安排。.Net中有GC回收,C++中需要程序员自己释放。
    3. 全局区(静态区):全局变量和静态变量存放区,初始化的全局变量和静态变量都放在这个区域,未初始化的全局变量和静态变量则在相邻的另一块区域。
    4. 文字常量区:常量字符串就是放在这里。
    5. 程序代码区:存放函数体的二进制代码。

    栈为先进后出,堆则为无序进出。

    数据入栈从高到低,即最开始入栈的数据随程序的运行,其他数据的入栈,会从高点到低点,称为压栈。

    数据入堆则是先在某个表(姑且认为是记录空白内存的登记表)找寻第一个足够大小的内存空间,然后返回这个内存空间的地址,然后将数据存储进对应的内存空间,数据存放后多余的内存空间则会重新登记在表中。

    堆栈溢出,因为每个函数占用一个栈帧,所以递归为方法中调用方法,占用过多栈帧,超过1M栈大小,会报错,堆栈溢出。

  • 相关阅读:
    C代码调用Java代码
    简易的美图秀秀利用别人的so库
    C代码输出日志
    JAVA向C传递数据
    JNI使用常见错误
    JNI的开发步骤
    NDk的目录
    交叉编译
    jquery的一点点认识
    [效率提升]工作中的那些命令行
  • 原文地址:https://www.cnblogs.com/ianism/p/4265226.html
Copyright © 2011-2022 走看看