首页 > 解决方案 > 如何使用 C/C++ 访问内存的内容?

问题描述

我想知道RAM的最高地址。假设我有 4GB(在 32 位计算机中)和 16GB(在 64 位计算机中)的 RAM,但它也与显示器共享,这意味着并非所有 RAM 都用于应用程序。我想知道它仍然未被占用的部分 RAM 的地址是什么,以及特定内存地址中的数据类型是什么?这里似乎有很多问题。这显然是关于指针和内存分配的。但实际上我想知道的是:

C/C++ 中要知道的命令是什么?假设我想访问内存地址“4294967295d”或“FFFF FFFFh”或任何其他地址的内容。

我的编译器在 Windows 和 Linux 下都是 gcc。

标签: c++gccmemory

解决方案


正如您所想的那样,“内存地址”并不存在。在现代机器上,这将使用受保护的内存来完成,这意味着地址本身并不绑定到物理内存库,而是绑定到表示内存并映射到物理内存的页面。

如果您的进程试图访问尚未专门分配的内存,那么它将触发页面错误并终止。你被困住了。这与旧操作系统不同,在旧操作系统中,你可以在内存中四处寻找,看看那里有什么,甚至可以随意修改它。

从技术上讲,映射表中的地址可以是内核想要的任何地址,如ASLR所示。

自从 32 位机器和保护模式操作系统在 1990 年代后期接管以来,几乎就是这种情况。


推荐阅读