内存使用与分段

2021/9/29 7:11:00

本文主要是介绍内存使用与分段,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、内存使用
    • 1.逻辑地址
    • 2.重定位
    • 3.交换
  • 二、内存分段
    • 1.引入库
    • 2.读入数据
  • 总结


前言

提示:


提示:以下是本篇文章正文内容

一、内存使用

1.逻辑地址

内存作为计算机的基本组成部分,用来存储程序(指令和数据),内存单元按字节编址、寻址,程序装入到内存后,PC 指向程序开始地址,依次取指执行

即内存使用:将程序放到内存中,PC指向开始地址

这是main()编译后,entry是入口地址,如果_main相对于_entry的偏移地址是40

在这里插入图片描述
现在如果这段程序要运行,那么只要将PC指向 call 40 这条指令所在的地址就好了,执行完call 40之后,会自动跳到地址为40处执行。

但是现在有个问题,_main所在的位置一定是物理地址为40的位置吗?换言之,40表示的是物理地址吗?

学过前面的知识,我们知道肯定不是的,前面放的system模块

call 40这个40指的是相对于_entry的偏移量,程序里面的地址是相对地址(逻辑地址),而程序真正运行时的地址是绝对地址(物理地址),即程序运行时,根据逻辑地址得到物理地址就是地址的重定位

比如_entry这条指令的地址如果存放在物理地址为1000处,那么_main的
地址就应该是1040,所以call 40就要变成call 1040.

2.重定位

重定位:
重定位是指将指令中的逻辑地址转换为内存中实际的物理地址的过程

重定位方式:

1.编译时重定位
编译时重定位的程序只能放在内存中的固定位置,而编译结束后的内存使用情况不一定,与编译时的相同,因此这种重定位方式有很大的局限性。必须保证装入该程序时,这段程序要使用的地址是可用的。

编译时进行重定位后,装入过程不需要有额外开销,因此效率较高

编译时重定位一般用在可以保证一段程序固定地装入某段内存中的嵌入式系统中

2.载入时重定位(静态重定位)
程序在装入内存时,将指令中的相对地址加上装入的内存段的基址作为绝对地址,载入时重定位的程序一旦载入内存后就不可以再移动位置。不利于程序在内存中的移动(交换,swap)。

3.运行时重定位(动态重定位)
运行时重定位的程序,装入内存的仍是逻辑地址,在实际访问时进行重定位,即在进程 PCB 中保存程序段的基址,实际访问时进行地址翻译(由基地址与逻辑偏移计算出物理地址),无妨交换

3.交换

二、内存分段

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。



这篇关于内存使用与分段的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程