AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1480913
Accepted
Anchith Acharya
Anchith Acharya
Asked: 2019-09-10 23:54:59 +0800 CST2019-09-10 23:54:59 +0800 CST 2019-09-10 23:54:59 +0800 CST

内存位置地址实际上是如何存储在 cpu 中的?

  • 772

我一次又一次地看到内存位置的表示,它被描述为矩形框的线性阵列,其各自的内存地址位于左侧。现在,这些地址一般写成2000、2004、2008...等。(我想对于 32 位机器)。

根据所述系统,内存位置只是普通整数。但是当我在 C/C++ 中打印出地址时,它们会显示为字母数字字符串。另外,如果它们实际上只是整数,那会不会有问题,因为包含像 2000 这样的数值的寄存器(比如 R1)可以突然充当指向内存位置的指针,只需将其括在括号中?像这样: (R1) - >this 将指向内存位置 2000

(顺便说一句,那是汇编语言)

那么内存地址究竟是如何存储在内存中的呢?

memory-management assembly
  • 3 3 个回答
  • 1061 Views

3 个回答

  • Voted
  1. binarym
    2019-09-11T00:36:30+08:002019-09-11T00:36:30+08:00

    根据所述系统,内存位置只是普通整数。但是当我在 C/C++ 中打印出地址时,它们会显示为字母数字字符串。

    可能是因为您%X在格式字符串中使用了类似的东西,将其呈现为十六进制数。使用%d将以十进制打印地址。

    另外,如果它们实际上只是整数,那会不会有问题,因为包含像 2000 这样的数值的寄存器(比如 R1)可以突然充当指向内存位置的指针,只需将其括在括号中?像这样: (R1) - >this 将指向内存位置 2000

    真的。在 C 语言中,没有什么能阻止你这种误用。管理这个是程序员的责任。

    (顺便说一句,那是汇编语言)。那么内存地址究竟是如何存储在内存中的呢?

    在现代系统中,内存地址通常是“虚拟的”,主要由专门用于此任务的硬件组件 MMU(内存管理单元)管理。

    • 1
  2. Best Answer
    sawdust
    2019-09-11T01:17:59+08:002019-09-11T01:17:59+08:00

    根据所述系统,内存位置只是普通整数。

    是的,因为它们只是数字。

    但是当我在 C/C++ 中打印出地址时,它们会显示为字母数字字符串。

    您没有提到这些地址显示在什么基数(或数字基数)中。
    如果地址以基数 2 表示,那么将只有 0 和 1。
    过去八进制表示很常见,因此地址可以用数字 0 到 7表示。
    如果地址以 16 为基数表示,那么十六进制数字包括 0 到 9 以及字母 A 到 F。这是您指的是“字母数字字符串” ?

    另外,如果它们实际上只是整数,那会不会有问题,因为包含像 2000 这样的数值的寄存器(比如 R1)可以突然充当指向内存位置的指针,只需将其括在括号中?像这样: (R1) - >this 将指向内存位置 2000

    错误地编写指令或语句(又称错误)始终是编程中的一个问题。
    但是内存地址就像整数一样。
    这就是完成表/结构位移的指针算术和计算的方式。

    高级编程语言(如 C)将具有不同的变量类型来区分 apointer和 an unsigned intor unsigned long,但是当数据类型具有相同的存储大小时,二进制结构没有实际差异。使用和转换的限制只是为了实现编程顺序并避免潜在的错误。
    在 CPU 级别,任何pointer(或内存地址)都可以被视为一个整数,任何整数都可以被视为一个内存地址。它们都只是数字。

    底线:CPU 只知道如何处理数字。一切都必须转换为(二进制)数字,以便计算机处理此类“信息”。

    那么内存地址究竟是如何存储在内存中的呢?

    一个“内存地址”,也就是指针,被存储为一个数值,就像一个整数(具有适当的大小)一样。
    您认为内存地址不是数字/整数的前提是不正确的。

    • 1
  3. Jose Manuel Gomez Alvarez
    2019-09-11T04:58:32+08:002019-09-11T04:58:32+08:00

    内存地址可以是绝对的,也可以是相对于基地址的偏移量。

    程序中的内存地址以十六进制格式,由变量名或标签等表示。在汇编中,地址可以存储在寄存器中,因此可以称为寄存器的内容,例如,(R1)是地址存储在寄存器 1 中。检查一下:https ://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture#Segment_Registers 。

    在特定体系结构中,区分物理地址和虚拟内存地址、分页的概念以及操作系统如何调用内存管理工作非常重要。

    还需要了解内存分段的概念,以及不同的段类型、共享内存的概念、动态与静态链接库等。

    根据架构,内存位置(我们称之为指针)的长度和数据类型会有所不同。

    最后,存在实际内存空间大于总线地址方向所能寻址的情况,需要对内存“bank”进行切换,这就是引入远指针概念的原因。查看近指针和远指针之间的区别。

    所以简而言之,这个问题太开放了,因为它被制定了。

    • 0

相关问题

  • 尝试编译 .hla 文件时出现转换错误

  • 为什么 RAM 芯片表示为 2K X 8 格式

  • symantec Stuxnet 分析中的“部分名称”是什么意思?

  • 如果没有页面文件,是否使用 Windows 10 内存压缩?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve