【问题标题】:Which location address in a pointer refers to指针中的哪个位置地址指代
【发布时间】:2010-08-08 11:04:11
【问题描述】:

指针中的地址指的是什么,主内存中的实际地址位置或虚拟地址。是否可以配置。

如果它是指虚拟地址,内存管理器是否需要在每次访问时将此地址转换为真实地址

【问题讨论】:

    标签: c++ c pointers memory-management


    【解决方案1】:

    这取决于您的系统和操作系统。

    对于典型的 windows/linux 用户空间应用程序,地址是虚拟内存地址。用户空间应用程序无法使用物理地址访问内存——这是操作系统为每个进程提供的抽象之一。

    MMU(内存管理单元)对每次内存访问进行此转换,由操作系统为您的进程设置正确映射。

    【讨论】:

    • 在 Linux 上,用户空间应用程序可以通过 /dev/mem 读取和映射物理内存。显然,它必须是一个特权应用程序,尽管仍然在用户空间中。 lwn.net/Articles/147901
    【解决方案2】:

    如果您的系统使用 VM,则该地址是虚拟的,如果不是,则不是。这与 C 或 C++ 无关。

    【讨论】:

    • -1 表示没有任何贡献并且没有努力找出提问者试图问什么的迂腐。
    • 我没有看到无用的迂腐,指出这与编程语言无关是一个有效且有启发性的言论。
    • 这不是迂腐,这是无知。 anon 显然不知道虚拟内存是什么。
    【解决方案3】:

    换句话说,作为开发人员/程序员,您不必担心地址是虚拟的还是真实的。指针在所有情况下都能完美运行。

    【讨论】:

      【解决方案4】:

      在某些操作系统中,您正在与实际的物理地址进行交互,例如在旧的 MS-DOS/Apple ][ 操作系统中,您可以直接在实际图形内存中四处寻找。但是,这有一个限制,即您的程序被卡在内存中的某个位置。稍微简化的现代操作系统有一个内存管理器,它通常将应用程序与实际物理内存隔离开来,这使操作系统能够以更有效的方式处理多个进程并允许应用程序使用虚拟内存。

      【讨论】:

        【解决方案5】:

        在有虚拟内存的真实操作系统上,当然不能配置,因为正常进程是没有权限偷看物理内存的;他们只看到虚拟内存。

        【讨论】:

          猜你喜欢
          • 2019-07-15
          • 1970-01-01
          • 2021-07-18
          • 2020-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-10
          相关资源
          最近更新 更多