码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 什么是内存和进程的运行原理


    文章目录

    • 什么是内存
        • 存储单元
    • 进程运行的基本原理
        • 逻辑地址和物理地址
    • 从写程序到程序运行—编译、链接、装入
    • 装入的三种方式
        • 绝对装入
        • 静态重定位
        • 动态重定位
    • 三种链接方式
        • 静态链接
        • 装入时动态链接

    什么是内存

    image-20221030163508838

    • 内存是一种硬件,我们的程序必须进入内存,才能被CPU执行,我们的CPU只能跟内存交互

    存储单元

    在这里插入图片描述

    • 为了知道我们的数据存储在什么地方,那么就需要给我们的内存进行分区 编号,比如我们的酒店,就分为一间间客房,然后给客房编号,我们的住户就知道应该住在酒店的什么区域
    • 我们的内存中将这种小房间称为存储单元
      • 如果计算机按照字节编址(一个房间的大小为一个字节)
      • 如果按字编制,那么每个存储单元的大小为一个字,如果计算机的字长是16位,那么每个存储单位的大小位16位

    数量单位和内存地址

    在这里插入图片描述

    进程运行的基本原理

    指令就是操作码和若干参数(包括地址码)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • 因为这种特性,所以造成我们的代码中的原子性的问题
    • 因为要获得数据,所以我们必须要得到数据的地址,在上面的例子中,指令中给的变量x的实际地址(物理地址),但是在实际生成机器指令的适合并不知道该进程的数据会被放到什么位置,所以在编译生成的指令一般是使用逻辑地址

    逻辑地址和物理地址

    image-20221030171301019

    从写程序到程序运行—编译、链接、装入

    在这里插入图片描述

    • 编译:就是将我们的高级语言编程成机器语言
    • 链接:由链接程序将编译后形成一组目标模块,以及将所需的库函数链接在一起,形成一个完成的的装入模块
    • 装入:也就是将装入模块装入内存运行

    装入的三种方式

    绝对装入

    在这里插入图片描述

    • 这种方式只适合我们的单道程序环境 也就是我们程序中的地址必须是物理地址,不然就会出错
    • 可以由我们的程序员直接赋予,但是一般是在编译或者汇编的时候给出

    静态重定位

    在这里插入图片描述

    • 我们的装入模块的地址加上物理上的初始地址,然后在装入内存
    • 这种需要在装入内存的时候,必须要分配其要求的全部内存空间,而且这种方式一旦进入了内存,在运行期间就不能在移动,也不能再神奇内存空间

    动态重定位

    在这里插入图片描述

    • 编译,链接后的装入模块的地址是我们的逻辑地址,装入内存后也还是我们的逻辑地址

    在这里插入图片描述

    • 当我们的程序真正要执行的时候,才会利用重定位寄存器来得到真正的物理地址
    • 好处就是
      • 我们允许我们的程序在内存中发生移动
      • 并且可以将程序分配到不连续的存储区,我们在程序允许的时候装入它的部分代码就可以进行运行,然后再程序运行期间根据需求动态申请分配内存(这样可以想用户提供一个比存储空间更大的地址空间)

    三种链接方式

    静态链接

    在这里插入图片描述

    • 在程序运行之前,就是还没有装入内存就将各目标模块以及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开

    装入时动态链接

    在这里插入图片描述

    • 在装入的时候动态链接,各目标模块装入内存的时候,边装入边链接的链接方式

    在这里插入图片描述

    • 也就是在程序执行的时候当需要该目标模块的时候,才对它进行链接
  • 相关阅读:
    java毕业生设计-学生考勤管理系统-计算机源码+系统+mysql+调试部署+lw
    说大话还是真实力,Rust是被炒“火”的吗
    Matlab进阶绘图第28期—带回归趋势线的密度散点图
    python可视化分析之印度中国人口分析
    微信小程序开发基础(二)基本组件
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    26.【算法五章-----02】
    Oracle 12C的闪回技术详解
    Probability Calibration概率校准大比拼:性能、应用场景和可视化对比总结
    redis的一些操作
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/127604196
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号