写入指定的内存位置

Writing to specified memory location

本文关键字:内存 位置      更新时间:2023-10-16

我刚刚开始学习C++所以我可能离这个目标很远,但对我来说要轻松。

我想做的是写入我指定的内存地址 - 如果可能的话?

我使用的代码是:

#include <iostream>
int main()
{
    using namespace std;
    int i = 100;
    int* p = &i;
    cout << p << "n";
    cout << "Writing" << "n";
    int* w = (int*)0x28ff18;
    *w = 101;
    cout << *p << "n" << "Done";
    return 0;
}

我得到的i地址是0x28ff18,那么可以通过指定这个地址来写入该位置吗?而不是使用*p = 101.显然我正在使用的东西不会改变它,我不知道它在哪里或是否在写101.

任何简单的解释或帮助都非常感谢。

在大多数计算机和大多数编译器上,这样的东西可能会起作用。但是C++标准并不能保证这一点。

例如,当我在 Windows 计算机上使用 MSVC++ 编译和运行您的代码时,每次地址都不同。您不能期望它在同一程序的不同运行之间是相同的。

另请注意,存储指针值的整数应该足够大(例如,当您有 64 位指针时,为 64 位整数)。如果你想这样做,请使用uintptr_t(感谢拉斯曼斯指出这一点)。

i的地址可能因程序的一次运行而异。这是非常不安全的。请不要这样做;内存地址隐藏在C++中指针抽象后面是有原因的。

唯一可以看到内存地址文本的地方是非常小的嵌入式系统和操作系统内核/驱动程序。

尽管可以写入特定的内存位置,但这并不一定意味着这样做是安全的。

在您拥有整个内存空间(特别是嵌入式系统)的环境中,写入特定内存地址以执行内存映射 I/O 操作是很常见的。在操作环境控制内存空间的情况下,写入尚未分配给程序的任何内存都是不安全的。