繁体   English   中英

什么是未使用的内存地址?

What is an unused memory address?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

因为对旧的计算机硬件感兴趣,所以阅读有关Commodore 64内存分配的HTML页面时,偶然发现表中的一个单元格声称该内存地址未使用。 这到底意味着什么? 这是否意味着如果您想在该地址中放一些东西,就可以放任何您想放的东西? 感到困惑,将不胜感激。 谢谢。 在此处输入图片说明

3 个回复

内存映射通常应指定哪些程序使用此内存。 如果他们说“未使用”,则意味着这些指定的程序不使用该地址。 在这里您可以更好地看到它: https : //www.c64-wiki.com/wiki/Zeropage

这些零页地址对于C64编程非常有用且非常重要-如此有用,以至于内部KERNAL和BASIC系统ROM充分利用了其中的零地址,只剩下极少数对机器语言程序员用于其目的完全“安全”的选择,无需冒系统崩溃的风险。

因此,内存映射仅对KERNAL和BASIC有效。

其他程序(包括您的程序)可能会毫无风险地访问未使用的地址。 如果加载了其他程序,则必须找出它们所访问的地址。 您也可以访问其他地址-即使它们被其他程序使用-如果您确切知道会发生什么,那么...

LT; DR

它指的是工作内存地址,BASIC或KERNAL例程不使用该地址,并且可供通用编程使用。

详细说明:

您所引用的页面是一个非常好的资源,但是如果您不熟悉系统本身,那么它会过于详细。 我建议在进行详细介绍之前先了解一般的内存布局。

下面是从COMPUTE中获取的常规内存映射 杂志第32期

在此处输入图片说明

c64内存映射是高度可配置的。 您可以看到I / O和ROM区域位于RAM区域的顶部。 在C64体系结构中,ROM区域下方始终有隐藏的RAM。 您可以关闭不需要的ROM区域以到达下方的RAM,并在需要时切换回ROM(或I / O)。 您也可以将屏幕ram移动到所需的任何位置。

只有$ 0000- $ 0400之间的区域(称为工作内存)是固定的,因为该区域由操作系统使用(BASIC解释器和KERNAL例程)。 如果要在工作内存中使用内存而又没有奇怪的副作用,则必须关闭BASIC或KERNAL ROM。

例如:如果您关闭BASIC rom,则可以安全地使用从$ 2到$ 90的零页面地址

虽然有聪明的解决方案。 与实用程序工具一样,假定您不使用数据集,则驻留在数据集缓冲区($ 033C- $ 03FB)中,或将屏幕ram用作临时缓冲区并有效地在屏幕上填充乱码。

我还必须提醒,内存的第一页(从$ 0000到$ 00FF)对于6502系列CPUS非常重要。 该区域称为零页。 在零页上工作的指令占用较少的内存字节,并且执行速度提高了一个周期。 此外,索引间接和间接索引存储模式仅在零页中可用。

如果需要保留默认的内存配置,并且仍然需要一些零页变量,则需要在零页内查找未使用的地址。 这是在详细内存映射中称为“未使用”的主要原因。

另请注意:用户编写的ML程序通常放置在$ C000- $ D000中,BASIC解释器不触摸它,并称为“ Free Ram”

BASIC和KERNAL使用大多数零页(地址$0000$00FF ),几乎没有什么可用于您自己的程序。 未使用的地址是$0002$00FB$00FE

零页在6502和相关CPU上是特殊的。 考虑以下说明:

LDA $1234

这将向累加器(寄存器之一)加载地址$1234的内容。 对于零页面地址,此指令有一个更快的版本:

LDA $02

到目前为止,没什么大不了的,但是有两种需要零页面的间接寻址模式。 例如:

LDA ($FB),y

读取$FB$FC的内容,将它们视为小端 16位地址,将Y寄存器的值添加到该16位地址,然后从该地址加载累加器。 请注意,这在零页中使用两个相邻的字节。 这使得零页末尾的四个未使用字节比$02的一个未使用字节有用得多。

如果您只是刚入门,则可以只使用四个字节的零页。 稍后,您可以考虑保存和恢复BASIC使用的零页部分。 如果您从程序中调用任何KERNAL例程,则要避免使用KERNAL所占用的部分。

如果您使用BASIC编程,那么这一切都不重要。 您可能只会使用PEEKPOKE来控制视频,音频和I / O。 您可以使用BASIC变量和数组来存储程序的数据。

1 地址空间中未使用的内存是否受保护

进程的地址空间中未使用的内存是否仅受到读取权限的保护,因此写入单位指针指向的位置总是会导致页面错误被操作系统捕获? 或者不是这种情况,并且除了代码之外的每个内存位置(哪个都是只读访问权限)都被赋予写访问权限? 我问这个是因为我的朋友正在向我展示他的代码,他没有初始化指针并在其指向的内存中 ...

2 未使用的内存的名称是什么

当应用程序分配内存但从不释放内存时,我们称其为内存泄漏。 但是,如果应用程序分配了内存,短时间使用了内存,即使未使用它,也将其分配给剩余的执行时间,并且仅在完成之前将其释放,但从技术上讲,这并不是内存泄漏,尽管是一个错误。 有这个名字吗? 例如,在C ++中使用Qt,我的意思是: ...

4 存储在未使用的内存空间中的值是什么?

我使用 mmap() 从 /dev/zero 分配了 4096 长度的内存空间,我发现我仍然可以访问这个空间之外的内存(例如 start_pt 是指向该空间的指针,我可以打印*start_pt+8192 没有任何分段错误)。 并且存储在越界区域中的值似乎是随机的。 有没有人知道这些值是什么以及为什 ...

6 这是什么内存地址结构

我在计算机体系结构中有这项工作,有人可以帮忙吗: 让我们考虑一个具有4 KB内存的计算机系统,该内存是字节可寻址的。 我们使用由256个字节组成的高速缓存,并使用四种方式关联,行大小为4个字节。 缓存使用FIFO替换算法。 显示内存地址结构,显示工作原理假设缓存为空,处理器按以下地址顺序访问内存 ...

7 有什么内存地址空间?

使用了什么形式的内存地址空间? 今天,大型扁平虚拟地址空间很常见。 从历史上看,已经使用了更复杂的地址空间,例如一对基地址和偏移量,一对段号和一个偏移量,一个字地址加上一个字节或其他子对象的索引,依此类推。 不时,各种答案和评论声称C / C ++指针本质上是整数。 这是一个不正 ...

8 如何确定操作系统中未使用的内存区域的起始地址?

我正在从事一些与Windows 物理内存中的巨大对象有关的项目。 我想创建非常大的数据结构,但是因此发现了一些问题。 当我尝试分配大量数据时,我可以创建尽可能大的对象(取决于堆) (这也取决于操作系统的体系结构)。 我不确定这是否受线程的私有堆或其他方式的限制。 当我寻找操作系统如何 ...

9 内存地址-它对程序员有什么用?

晚上社区 我正在学习Python,然后经常可以看到内存中对象的地址,例如: 当我运行程序时,该python正在与我共享。 如果有的话,将来对我有多大用处? 还是仅仅是运行该程序的副作用,而人类却没有使用它? ...

10 内存地址是什么意思?

十六进制内存地址代表整个内存中的位置吗? 例如4 GB内存,并有一个内存地址。 它是否指向数据开始的位置(以字节为单位)? 例如2.1 GB。 数据加载到内存之前,硬盘上的内存地址如何工作? 是否曾经发生过部分数据是从内存中提取而其他数据是从磁盘中提取的情况? 地点如何区 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM