以下是我用于在0x10000000处写入无符号数据的代码。 该程序已编译但运行失败。
void load_program(unsigned base_address){
char* IM=reinterpret_cast <char*>(base_address);
unsigned a=0;
*IM=a;
}
int main(int argc, char** argv) {
unsigned address=0x10000000;
load_program(address);
return 0;
}
答案 0 :(得分:2)
操作系统实际上不允许您访问未通过操作系统界面分配的内存。内存管理非常复杂(以https://en.wikipedia.org/wiki/Paging为例)。
您的代码应该在没有操作系统的设备上运行,例如Arduino。
无论如何,如果你想管理你自己的记忆,也许你可以先调用malloc
(这是oldschool C风格)来分配一个块,如
int * pointer = 0;
int size = 50000;
pointer = (int*) malloc(size); //pointer now points to the beginning
答案 1 :(得分:1)
在Linux平台上操作系统不允许用户(用户空间进程)选择一个随机地址并将数据放到该地址上,因为普通用户空间进程无权修改/写入RAM的特权区域。 / p>
char* IM = 0x10000000;
*IM = 10; /** It won't allow you to access */