作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的确切问题是 c
和 c++
中有任何规定可以将值显式分配给特定地址,例如假设我想存储 20
位于内存中的 0x1846010
地址,我还想使用同一地址 (0x1846010
) 访问一个值。
可能很简单,但如果可以的话,我真的很困惑如何做到这一点。
任何人都可以解释这是否可能,如果是那么如何(用合适的例子),如果不是那么为什么?
提前致谢。
最佳答案
你可以这样做:
*(int *)0x1846010 = 20; // store int value 20 at address 0x1846010
检索相似作品:
int x = *(int *)0x1846010;
请注意,这假定地址 0x1846010 是可写的 - 在大多数情况下,这将生成类似访问冲突写入位置 0x01846010
的异常。/p>
附言为了您的兴趣,您可以使用以下命令(从 here 借用)在运行时检查给定地址是否可写:
#include <fcntl.h>
#include <unistd.h>
int is_writeable(void *p)
{
int fd = open("/dev/zero", O_RDONLY);
int writeable;
if (fd < 0)
return -1; /* Should not happen */
writeable = read(fd, p, 1) == 1;
close(fd);
return writeable;
}
讨论 here ,通常你只会对没有操作系统的嵌入式代码等做这种事情,你需要写入特定的内存位置,如寄存器、I/O 端口或特殊类型的内存(例如 NVRAM
).
关于c++ - 显式分配或访问内存中特定地址/位置的值或从中访问值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288582/
这个问题在这里已经有了答案: Is a moved-from vector always empty? (4 个答案) 关闭 4 年前。 从 std::vector move 数据后,它的容量是否必
我是一名优秀的程序员,十分优秀!