zoukankan      html  css  js  c++  java
  • 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 第二次作业
    Java上机作业5.7
    Java上机作业4.30
    Java第八周作业
    上机作业4.23
    第七周作业
    4.16上机作业
    第六周作业
    Java上机作业4.9
    Java4.2上机作业
  • 原文地址:https://www.cnblogs.com/championlai/p/3979286.html
Copyright © 2011-2022 走看看