gpt4 book ai didi

c++ - 访问 C++ 变量时如何解析其内容?

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:07 24 4
gpt4 key购买 nike

在C++中访问一个变量时,它的内容是如何解析的?

操作系统是否可以在不影响其逻辑地址的情况下将变量重新映射到不同的地址?是否有可能在 2 个不同的进程中有 2 个变量指向相同的逻辑地址?

最佳答案

是的,操作系统绝对有可能在内存中移动变量。几乎所有现代计算机都使用 virtual memory ,其中每个进程都认为它可以访问机器的完整地址空间。但是,无论何时发生内存读取或写入,地址都会从进程地址空间中的虚拟地址转换为计算机实际地址空间中的某个物理地址。操作系统可以根据需要更改这些映射,可能是通过移动内存块,或者将它们临时写入磁盘等。这允许多个进程各自使用比系统可用的内存更多的内存,因为操作系统可以透明地将内存块移入和移出 RAM,而进程无法检测到这一点。

使用虚拟内存的一个优点是两个进程可以各自使用相同的虚拟地址而不会相互冲突。例如,两个进程可能各自使用地址 0xCAFEBABE,并且每个进程都看到自己的拷贝。但是,当进程读取或写入该值时,该地址将被转换为不同的物理地址,因此每个进程都可以拥有自己的拷贝。许多操作系统实际上提供了允许进程在需要时共享内存的功能,或者允许具有相似数据片段(例如,共享库)的许多进程具有映射到同一物理地址的不同虚拟地址。

因为 C++ 直接访问机器的底层内存,任何时候在 C++ 中读取或写入变量,操作系统可能会捕获指令,在发生读取或写入的物理内存中分页,然后将控制权恢复给程序.与硬件的内存系统一样,这并不是真正的 C++ 功能。

简而言之 - 程序使用虚拟地址,操作系统将其映射到物理地址,以确保每个进程都认为它拥有内存系统的全部所有权. C++ 程序默认使用此系统,因为它们使用底层硬件。

关于c++ - 访问 C++ 变量时如何解析其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com