⑴ 编写程序过程中要引用变量的存储地址时,可以通过什么来获得
编写程序过程中要引用变量的存储地址时,以通过好腔局程序计数器PC来获得。
名字编译后会被映射成数据的地址(可以是绝对地址或者偏移地址),如何通过地址来访问数据,本身就是代码的一部分。而外部变量的地址,在编译的时候还不能完全确定,就先空着,等链接的时候再进行回友让填。
引用变量的存储地址:
程序中用到的所有地址,都不是真实的内存地址,只是虚拟内存地址。程序用到虚拟内存,分成一页页,比如每页是 4K。有些页确实存储在真实的内存当中,但圆坦有些页存储在磁盘当中,有些页就单纯空着。操作系统和硬件会将虚拟内存映射成真实的内存,具体的程序不用关心。
⑵ c++ 怎样获取vector中元素的存储地址
vector的元素是连续存储的,只要获取任何一个元素的指针就可迹册以使用指针访问vector里的慧嫌每一个元素了,但是如果姿碧宏vector中插入或者删除元素,这个地址就有可能无效了。
解引用迭代器可以获取迭代器所指向的元素的引用,在对这个引用使用取地址运算符就可以获取该元素的内存地址。
⑶ 存储器的逻辑地址由哪几部分组成存储器的物理地址是怎样形成的
存储器的逻辑地址由段地址和偏移地址两部分组成
存储器的物理地址=段地址×10H+偏移地址
⑷ 8086/8088存储器的物理地址是如何形成的
物理地址=段地址左移四位+偏移地址,,4,8086寻址采用“段:偏移”的方式罩或(如SS:BP),段地址寄存器和偏移地址寄存器都是16位长的,实际的线性地址是20位,由“(段 << 4) + 偏移”得到。
32位CPU一般寻址空间也是32位线,直接产生32位的线性地址(不考虑描述符、分页等机制),因此不存在上述现象。
另外,相关地,80286后就有了实模式与保护模式的区别(当然,物锋伍不仅仅是寻址方式的区别)。...,2,物理地址=基址X16+偏移地址。这里面的16是十进制数,化成16进制数正好是10H。式中的物理地址、基址、偏移地址都是16进基档制表示~,1,
⑸ 什么是有效地址如何获得有效地址
当操作数是存放在存储器中时,存储器的存储单元的物理地址有两部分组成。一部分是偏移地址;一部分是段地址。在8086/8088的各种寻址方式中销昌,侍斗燃寻找存储单元所需的偏移地址可由各种成分组老虚成,称为有效地址,用EA表示。可以通过存储器寻址方式获得有效地址
你是理工的?
⑹ 什么是逻辑地址什么是物理地址在实模式下,如何求存储器的物理地址假设一个
逻辑地址和物理地址的区别是:
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。
物理地址(Physical Address) 是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。
虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。 逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。
⑺ arm中存储器的实际地址是如何确定的是CPU直接分配好的吗
存储器是可以映射成为不同的地址的。
一般来说,ARM处理器由于是32位的,所以可以访问的地址空间为4G。在这些地址空间内,实际的每个物理存储器,可以被映射在任意的地址上。你可以查看所使用的CPU手册来确定,每个存储器是怎么被映射的。下面举个例子说明一下。
ATMEL公司的AT91SAM7S256,ARM7TDMI内核,内部集成256KB Flash和64K SRAM。其中Flash被默认映射在0地址处,也就是说你访问0x0地址访问的就是Flash。但是,Flash还有一个地址:0x100000,你访问这个地址和访问0x0实际上是一个地方。就好比是你家开了两个门一样,入口不同,但是进的地方是一样的。而SRAM则被映射在0x200000地址处。
系统启动后,在MCR寄存器内写入1,这时CPU会调整存储器的映射关系,会把SRAM映射在0x0地址处,也就是说你现在访问0x0实际上访问的是SRAM的0x200000地址。
其他的许多支持外部存储器的(比如带NAND Flash控制和SDRAM控制器的)CPU,都可以把外部存储器映射到4G的地址空间内。它们的说明书绝对会有相对的说明,有一个图,叫地址空间映射表,你一看就明白了。
⑻ 存储单元的地址的基本定义
单元地址:单元地址简称地址,在存储器中每个存储单元都有唯一的地址编号,称为单元地址。
在计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是字节。一个存储单元可以存储一个字节,也就是8个二进制位。计算机的存储器容量是以字节为最小单位来计算的,对于一个有128个存储单元的存储器,可以说它的容量为128字节。
(8)存储器地址可以如何获得扩展阅读:
一般应具有存储数据和读写数据的功能,以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。
程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。存储地址一般用十六进制数表示,而每一个存储器地址中又存放着一组二进制(或十六进制)表示的数,通常称为该地址的内容。
⑼ java如何获取到数据存储的地址,就想C中的&操作符
菜鸟拙见:
object中有tostring()方法,如果是对象,你可尘春野以直接调用tostring(),返回的是包含以@开头的内存地址的字符串,如果是派喊基本数据类型,见用包装器包装成对象,然后用super来调用object中的tostring()方法。
不知道森陆是否是这样,你可以试试
⑽ 程序存储器中的数据怎么寻址
程序存储器指令地址使用程序计数器PC指针,PC中存放的是下一条将要从程序存储器中取出的指令的地址。程序计数器PC变化的轨迹决定程序的流程,PC最基本的工作方式是自动加1。
在执行条件转移或无条件转移指令时,将转移的目的地址送入程序计数器,程序流向发生变化。在执行调用指令或响应中断时,将子程序的入口地址或者中断矢量地址送人PC,程序流向发生变化。
DPTR是一个16位特殊功能寄存器,主要功能是作为片外数据存储器或I/0寻址用的地址寄存器,这时会产生RD或wR控制信号,用于单片机对外扩的数据存储器或I/0的控制。数据指针DPTR也可以作为访问程序存储器时的基址寄存器,此时是寻址程序存储器中的表格、常数等单元,而不是寻址指令。