zoukankan      html  css  js  c++  java
  • 程序的内存结构

      以32位CPU为例,可以寻址4G的空间,每个进程都有自己独立的4G逻辑地址内核空间占1G(高地址),用户空间占3G(低地址),不同进程相同的逻辑地址(CPU生成的地址)映射到不同的物理地址(物理内存的地址)。

        程序在存储(还未调入到物理内存)时,由代码段,已初始化数据段和未初始化数据段三部分组成。静态区域:代码段(Text segment),已初始化数据段(Data segment),未初始化数据段(BSS segment);动态区域:堆(Heap),映射区(Memory Mapping segment),栈(Stack);

      代码段:只读存储区-存储字符串常量;文本区-存储程序的机器代码;

      已初始化数据段:存储程序中已经初始化的全局变量和静态变量;

      未初始化数据段:存储程序中未初始化的全局变量和静态变量,以及初始化为0的全局变量和静态变量;未初始化的全局变量和静态变量编译器会将其初始化为0;

      :程序未调用new/malloc之前不存在堆,调用new/malloc时才分配堆;程序运行过程中堆可以动态增长(从低地址向高地址增长);

      映射区:存储动态链接库等文件映射,申请大内存时分配在映射区;

      :存储函数的返回值、返回地址、参数和局部变量等,从高地址向低地址增长;创建进程时,默认的栈空间的最大值为1M。

  • 相关阅读:
    基础数据类型之字符串str
    python编码基础知识
    python逻辑运算之and、or
    Django中消息中间键和form组件的运用
    Django中 cookies and session的使用
    JavaScript 正则制表符,单词边界,去空格
    paramiko堡垒机、线程及锁
    0911 Socket网络编程
    os.system和os.popen
    类高级方法、反射、异常、动态导入模块
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/14372836.html
Copyright © 2011-2022 走看看