• C程序的内存空间


    一个C程序在内存空间里面主要包括以下几个部分:
    1,代码段
    2,数据段
    3,栈
    4,堆

       代码访问代码段,数据段放静态和全局变量,函数参数和局部变量放在堆栈里面,堆里面存是malloc分配的区域
       堆栈里面是一个栈的结构,往里push东西的时候就小的数据就是向整形,浮点型这类基本的数据。但是stack有一个更大的单位,那就是stack frame,一个函数通常对应一个stack frame,在stack frame里面存放的依次是进入函数后执行的第一条指令地址,参数(一般是从右往左压入参数),局部变量。栈的分配方式又两种,一种是静态分配,编译器来分配。第二种是动态分配,调用malloca来进行分配,哲中动态分配的方式和heap的动态分配方式不太一样,在stack上分配的内存无须程序员自己回收。程序返回的时候,就回收了。
       heap是动态分配的,理论上来讲heap的空间可以很大,大到沾满整个空间,他是C/C++库函数提供的接口,而不向stack那样是操作系统原生的,所以heap比stack慢一些,操作系统有专门的stack register。
       stack是一块连续的区域,固定大小的,在编译时期确定,windows下默认的是2M,而heap是不连续的区域,当你new一个地址的时候,会去访问操作系统执行的一个free list,然后根据算法选定一块合适的区域然后分配的程序,记录到heap里面,会在这个端上记录大小,free的时候就可以根据地址来释放大小。
    ffff   
       heap
       ----
       stack
    0000
    heap增长方向是向着地址增长方向,stack是向着地址减小的方向
     
    资料:
      http://blog.csdn.net/rujielaisusan/article/details/4622197
      http://blog.csdn.net/yeyuangen/article/details/6766567

  • 相关阅读:
    Java并发理论简介
    【SQL】- 基础知识梳理(八)
    【SQL】- 基础知识梳理(七)
    【SQL】- 基础知识梳理(六)
    【SQL】- 基础知识梳理(五)
    【SQL】- 基础知识梳理(四)
    【SQL】- 基础知识梳理(三)
    '{ }'在不同上下文中的作用
    模块化你的JS代码
    利用模板将HTML从JavaScript中抽离
  • 原文地址:https://www.cnblogs.com/championlai/p/3979286.html
Copyright © 2020-2023  润新知