修复了C中的内存位置

时间:2013-08-02 13:49:34

标签: c memory memory-management

使用指针分配地址为0x67AB且值为0x1234的内存位置。 我正在尝试使用指针在内存中分配固定位置而不使用malloc()

3 个答案:

答案 0 :(得分:1)

如果您的程序在操作系统下运行,您将无法写入修复位置。为了做这样的事情,你的程序需要具有root访问权限并进行系统调用,以便操作系统自己在该位置写入。

但是,如果您正在为微控制器或嵌入式系统编写程序,那么您就是这样做的:

char* p = (char*)0x67AB;
p[0] = 0x12; // You need to write each byte at a time.
p[1] = 0x34;

答案 1 :(得分:1)

以下代码将0x1234写入正在执行进程的地址空间中的地址0x67AB,前提是您的C实现支持此行为(因为它超出了C标准所要求的范围)。您可能需要使用uint16_t以外的类型,具体取决于您的确切需求。如果您不知道自己在做什么,此代码可能会失败或导致其他问题:

#include <stdint.h>
…
* (uint16_t *) 0x67AB = 0x1234;

答案 2 :(得分:1)

假设您知道写入特定地址(如果正常),如PIC或控制器:

#include <stdint.h>
int16_t *ptr = (int16_t *) 0x67AB;
*ptr = 0x1234;

由于未指定整数的字节序,因此逐字节设置可能无法提供预期的行为。