内存的使用

内存-测量 Python 内存使用:这并不简单! 理想情况下,你的程序的所有内存都将存储在快速的 RAM 中,但计算机上运行的各种进程可能会分配比 RAM 可用内存更多的内存。如果我们测量分配内存,数组填充的内容无关紧要:我们可以切换到创建充满 0 的数组,仍然会得到完全相同的结果。通过这种测量方法,我们使用了 3083MB,即 3.08GB,与数组大小的差异无疑是 Python 解释器和我们导入的库所使用的内存。如果你想让你的程序使用更少的内存,你需要测量内存使用情况。你需要测量当前的内存使用情况,然后在你做出一些改进后,确保它使用了更少的内存。 阅读详情

如何让内存使用起来?

这里写图片描述

将程序放入内存中,不断取出指令,CPU执行指令(即能让程序执行起来)。

如何让程序装入内存?

1.绝对装入方式
2.可重定位装入方式
3.动态运行时装入方式

那么首先让程序进入内存
这里写图片描述

如果是这样不经处理直接装入内存,那么main函数的第一条指令就应该放在物理内存地址40这个地方,否则没法执行。

但是万一有其它程序放在这里,那么就不行了,所以实际上应该是找一块空闲内存来放这个程序。
这里写图片描述

但是又有问题了,IP=1000取指执行,call 40,IP=40,就会跳到下面去执行,然而我们希望执行的main函数的第一条指令的地址是在1040。

所以call 40,40是逻辑地址,程序中的地址,是相对地址,是编译程序时写成的地址。将程序装入内存时,将逻辑地址修改为物理地址。
call 40 -> call 1040

这里写图片描述

这样就引入了重定位。在装入时对程序中指令和数据的修改过程称为重定位。

什么时候完成重定位?

1.编译时
2.载入时(更灵活)

编译时重定位的程序只能放在内存固定位置;
载入时重定位的程序一旦载入内存就不能动了

但是…..

程序载入后还需要移动

多道程序环境下,内存中的某些进程可能被阻塞,但却占用大量内存空间,而又有许多进程在外等待,因没有内存而不能进入,这对系统资源造成浪费。

这里写图片描述

交换是将内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存。

这里写图片描述

这里写图片描述

这里写图片描述

进程1在载入的时候为1040,换出后在换进来还是1040,但是此时进程1已经放到了2000的位置,如果此时取指执行call 1040,就跑到其他地方去了。所以只在载入时重定位其实并不能满足要求。

重定位最合适的时机

运行时重定位

这里写图片描述

这里写图片描述

基地址放在进程PCB里面。在前面那张图中,换出去之前进程1PCB里面的base是1000,换出去再换进来,进程1的base是2000。执行指令时第一步是从PCB中取出这个基址。

总结

拿到一个可执行程序,要使用内存,就是让可执行程序执行起来。首先找到一段空闲内存,找到空闲内存的初始地址,赋给进程的PCB里面,程序载入到这段空闲内存中。在上下文切换时,PCB里面的基址就变成基址寄存器,每取指执行时,在执行过程中都要进行地址翻译,一翻译就找到这条指令实际使用的物理内存地址。
每次执行指令时都要从PCB中取出base基址(其实这个基址放在了基址寄存器里面)

这里写图片描述

Android 使用内存分析器检查应用的内存使用情况 内存性能分析器是中的一个组件,可帮助您识别可能会导致应用卡顿、冻结甚至崩溃的内存泄漏和内存抖动。它显示一个应用内存使用量的实时图表,让您可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。或者,您可以从命令行使用检查您的应用内存,还可以。 阅读详情

相关推荐

共享库装载时重定位相关资料

针对共享库装载时重定位的详细分析,与《程序员自我修养》有关章节相比,本文的分析更加详细,更便于理解。

操作系统-内存基础

为此在系统中建立一个已修改换出页面的链表,对每个要被换出的页面(已修改),可以暂不将它们写回磁盘,而将它们挂在该链表上,仅当被换出页面数达到给定值时,才将它们一起写回磁盘,这样就可显著减少磁盘I/O的次数,即减少已修改页面换出的开销。32位的寄存器只能产生4GB大小的地址,如果把所有段的基地址设为0,段的长度设为0xFFFFF,段长度的粒度设为4KB,一个段就是4GB,分段就成为了一种“虚设”,这就是保护模式的平坦模型(此时,逻辑地址就是线性地址)。在分页机制中,物理页也有属性值,可以进行内存保护。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 762

Monocle2拟时轨迹基因模块的GO富集解析

本文详细解析了如何对Monocle2拟时分析中得到的基因表达模块进行GO富集分析。通过从热图对象中提取聚类模块,并利用clusterProfiler等工具进行功能注释,将抽象的基因表达时序模式转化为可解释的生物学功能主题,如免疫应答、细胞外基质组织等,从而深入理解细胞命运转变的驱动机制。

gpt4scribbler的博客 500

动态共享对象的装载时重定位

最近读程序员的自我修养--链接 装载与库,其中有句话:动态链接模块被装载映射到虚拟空间后,指令部分是在多个进程之间共享的,由于装载时重定位的方法需要修改指令,所以没有办法做到同一份指令被多个进程共享,因为指令被重定位后对于每个进程来讲是不同的。一直没搞懂,花了不少时间查阅资料,了解原理。觉得自己一直理解的东西都太浅了。 以下是对这块内容的总结,作为记录。 其中的关键点在于掌握内存映射,重定位的实

parallelyk的专栏 4134

Java实战:绿盾加密文件批量解密工具Ldterm的实现与优化

本文详细介绍了基于Java开发的绿盾加密文件批量解密工具Ldterm的实现与优化过程。通过分析绿盾加密机制,结合Java流处理能力,实现了高效的文件解密方案,并分享了多线程处理、内存优化等性能提升技巧,适用于企业级数据迁移与备份场景。

weixin_29314405的博客 488

全国大学校园网—拓扑图欣赏

全国大学网络拓扑图(一百张) 典型十张 1、 中央财经大学 2、国防科技大学 3、济南大学 4、西安石油大学 5、南通大学IPV6网络 6、中国矿业大学 7、青海师范大学 8、内蒙古科技大学 9、三峡大学 10、中共江苏省党校 剩余90张 点赞、评论获取 ...

LiBai'S BLOG 5万+

《程序员的自我修养》学习笔记(七)————动态链接(2):地址无关码与延迟绑定

1.地址无关代码 1.1装载时重定位 为了能够使共享对象在任意地址装载,我们首先想到的方法就是静态链接中的重定位。这个想法的基本思路就是,在链接时,对所有绝对地址的引用不作重定位,而把这一步推迟到装载时再完成。一旦模块装载地址确定,即目标地址确定,那么系统就对程序中所有的绝对地址引用进行重定位。 我们前面在静态链接时提到过重定位,那时的重定位叫做链接时重定位(...

yangguoyu8023的博客 879

KANO分析模型

KANO分析模型的基本概念,目的意义,应用场景,实现方法和示例等

JasonH2021的博客 3066

软件运行机制与内存管理

虚拟内存模式下,整个内存空间划分为很多个连续的内存页,每个内存页大小固定,比如64k。访问时先计算虚拟内存对应的内存页,通过地址映射表查询对应的物理内存地址,然后读取数据。其二,通过中断的方式。软件可以假设自己代码加载的绝对地址是什么,不用在加载的时候重新调整cpu指令操作的地址(浮动地址)。缺页中断请求被操作系统接管,操作系统为这个内存页分配物理内存,恢复这个内存页的数据。其一,可以将操作系统内存管理的函数地址放在一个约定的地址,每个软件需要申请内存时可以从这个地方获取内存管理函数并调用。

jsl_iloveyou的博客 852

会计引擎:交易与核算分离的前世今生

一、为什么需要会计引擎 金融产品的设计,一如一块硬币需要兼顾两面:一面是为客户提供好的金融服务,满足客户支付结算、借贷、资产保值增值等方面的需求,并在这个过程中,以数字化的方式做好客户资产的登记,登记的载体,则是“分户”或“台账”,如客户存款户,是一种典型的分户--资金的增减变化都在一个账户中进行体现,而客户购买的银行理财,因为收益率、期限、投资标的不同,每一笔持有就形成一行记录,即为“台账”--这当然是不严谨但相对形象的表述。但是,“分户”和“台账”并没有必然的区别,以贷款为例,一些银行仍然存在所谓“

银行信息系统应用架构详解 983

【即插即用模块】Transformer篇 | ICCV 2025 | MALA :注意力分布神似Softmax,告别线性注意力性能短板!

MALA(Magnitude-Aware Linear Attention)是一种改进的线性注意力机制,通过引入缩放因子和偏移项,解决了传统线性注意力忽视查询幅度的问题,使其分布更接近Softmax Attention。该模块具有线性复杂度(O(n)),结合RoPE和LEPE编码实现全局-局部位置信息混合,通过z值调制平衡信息权重。实验表明MALA在轻量级视觉任务中能有效平衡效率与精度,注意力可视化显示其分布与Softmax Attention高度相似。代码提供完整的RoPE位置编码和线性注意力

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1106

正确使用内存

对于初学者来说,内存是个神秘的空间。程序的绝大部分错误,也是在于内存的使用不当造成的,而且这些错误有些都是隐藏很深的。所以,如何掌握内存的使用,通晓系统对内存的管理手段,将是软件成功的一个非常关键的因素。       首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种:1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,st

快乐天堂 5885

高通8397/8797 qcx camera usecase梳理

本文介绍了ISP(图像信号处理器)的两种工作模式:Inline模式和Offline模式。Inline模式下,前端(IFE)直接连接物理层并行处理,最多支持4路流处理,后端(IPE)通过内存访问完成增强处理;Offline模式下,图像数据先写入内存再由SFE_Lite读取发送给IFE_Full处理,实现一个IFE串行处理多路数据。文章还详细解析了camera_config和usecase配置文件的结构与作用,包括硬件资源配置、场景逻辑定义等,并以ID40_UsecaseDMS为例说明离线模式的具体实现流程,包

车载行业 847

mysql内存使用

mysql内存使用统计: MySQL分配缓冲区和缓存以提高数据库操作的性能。默认配置是大约512MB RAM的虚拟机上启动。可以通过增加某些缓存和缓冲区相关系统变量的值来提高MySQL性能。还可以修改默认配置以在内存有限的系统上运行MySQL。 以下列举了MySQL的内存使用方法: 1、缓冲池 InnoDB缓冲池是保持缓存的InnoDB表,索引,及其它辅助缓冲中的数据。为了提高大容量读取操作的效率...

baijiu1的博客 1614

Open3D 计算点云基本特征

在 Open3D 中,可以通过 PCA(主成分分析)来求得点云的特征值和特征向量。然后基于这些特征值,进一步计算各种几何特征,如线性、平面性、球度等。

纵马踏花向自由 1605

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

AIX 内存用法 - 或 - 谁在使用内存以及如何使用?

当你运行低AIX内存时,在添加更多之前,检查内存使用是很好的。

allway2的博客 513

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

查询mysql 的内存使用_如何查看MySQL内存使用情况

理解MySQL如何使用内存是调优内存以获得最佳性能以及排除意外内存使用情况的关键,例如,当您使用MySQL Server的数量远远超过基于配置设置的预期数量时。本篇文章分享如何通过MySQL语句查看MySQL内存使用情况。在MySQL历史的早期,了解内存使用情况的细节很困难,并且包含很多猜测。是否有可能某些正在运行的查询需要一个大的临时表或为存储的用户变量分配了很多内存?是否有任何存储过程占用了意...

weixin_32955207的博客 6540

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android Profiler 内存分析器使用

Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、网络和电池资源使用情况。

特立独行的博客 4831

[c++] 获取物理内存和可用虚拟内存、内存使用率、cpu使用率

获取内存 MEMORYSTATUSEX 函数原型: typedef struct _MEMORYSTATUSEX {     DWORD dwLength;     DWORD dwMemoryLoad;     DWORDLONG ullTotalPhys;     DWORDLONG ullAvailPhys;     DWORDLONG ullTotalPageFile;     DW...

初阳-.-#的博客 4085

Linux实际内存使用计算

Linux实际内存使用情况计算 通常我们看到Linux用top命令查看系统运行状况,普遍看到Used Memory占到了将近总内存的90%,然后很多人以为系统内存已经不足。其实,这只是Linux的为了提高文件读取的性能的内存使用机制罢了。不同于Windows,windows程序执行完后,会马上释放掉内存,把Memory降下来。而对于Linux,如果你的服务器内存还有足够多的空间的话,...

"其实我是一演员"的专栏 1万+

Linux free命令使用教程(free指令)(查看内存、系统内存、内存占用、内存使用情况)

free命令用于显示系统中未使用和已使用的物理和交换内存总量,以及内核缓冲区和缓存。这个命令能够帮助我们检查和监控系统的内存使用,从而优化和改进性能。$ free在这个例子中,“Mem”代表物理内存,“Swap”代表交换空间。对于每一种类型的内存,都提供了其总量(total)、已使用量(used)、空闲量(free)、共享量(shared)、缓冲/缓存量(buff/cache)以及可用量(available)的信息。Linux的free命令是一个强大且有用的工具,可以帮助我们了解和跟踪系统的内存使用情况。

Dontla的博客 3580

如何查看程序可使用的最大内存及内存使用情况

当加载带有大量图片的列表时,通常我们都要考虑到图片达到一定上限时,内存不足引发OOM导致程序崩溃的问题。下一步也许就是去找个图片加载开源框架来一劳永逸。OOM不急着解决,先来了解下关于程序可用内存的一丢丢知识。在面对OOM的时候,你有没有想过这些:  1.什么是OOM  OOM都知道是Out Of Memory的缩写也就是内存溢出,通俗点说就是内存用完了。  2.为什么会OOM

Run Away 1万+

JAVA查看内存使用情况

一、使用JAVA类库。

jingguangzhilu的专栏 7996

如何正确使用内存

首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种:1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.从堆上分配,亦称动态内存分

1905

js内存使用

所以,在我们js代码中,我们每定义(显示or隐式)一个变量,都将在栈或堆内存中开辟一块内存空间;2、存储的都是大小已知的基础变量(null虽然是object,但是因为大小固定,也存储在栈);咱们平时就是以这些方式定义变量,对于我们来说,是定义了一个用于存储数据的变量,文章主要从js内存分配、内存使用、内存释放、内存泄漏几点,简单的阐述了,关于GC的文章,各个博客已经特别多了,这里按自己的理解,总结一下GC;内存泄漏的本质,就是应该被回收的内存资源,发生异常,没有被正确回收;

Amethyst14的博客 696
上一篇: 中继器,集线器,网桥,交换机,路由器,网关
下一篇: Linux基本命令练习(2)
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值