加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何在内存中的特定位置存储值?

发布时间:2020-12-16 07:50:51 所属栏目:百科 来源:网络整理
导读:也许这是一个容易的问题,但我真的很想知道它. 如果我想在内存(堆中)的特定地址上存储一个值int(int),该怎么做? 说,我想将int值10存储在0x16.我猜通过调用new或者malloc这样做:int * p = new int(10);然后我想将存储的值的地址设置为0x16.起初我以为只是像
也许这是一个容易的问题,但我真的很想知道它.

如果我想在内存(堆中)的特定地址上存储一个值int(int),该怎么做?

说,我想将int值10存储在0x16.我猜通过调用new或者malloc这样做:int * p = new int(10);然后我想将存储的值的地址设置为0x16.起初我以为只是像& p = 0x16,但是这不行.我需要这样做才能在内存中存储一??些额外的信息(以前由malloc或new分配的内存空间).

我正在使用linux和C(但是C也会工作).

我想要实现的是:一个进程调用大小为x的malloc,并且我想在分配的内存前面存储一定的值(大小),所以我稍后可以访问大小(当调用空闲时).由于malloc被调用,所以我知道操作系统为这个值分配了空间的指针,而我只想将分配的内存的大小存储在分配的内存前面的4个字节中.我所做的(在我写的malloc钩子中)是分配更多的内存(通过内部mallok调用),但是我也需要能够将这个大小的值存储在特定的位置.

我很感谢所有的帮助.

解决方法

你可以这样做:
*(int *)0x16 = 10;  // store int value 10 at address 0x16

请注意,这假设地址0x16是可写的 – 在大多数情况下,这将产生异常.

通常,您只会在没有操作系统的情况下为嵌入式代码等做这些事情,您需要写入特定的内存位置,例如寄存器,I / O端口或特殊类型的存储器(例如NVRAM).

您可以定义这些特殊地址:

volatile uint8_t * const REG_1 = (uint8_t *) 0x1000;
volatile uint8_t * const REG_2 = (uint8_t *) 0x1001;
volatile uint8_t * const REG_3 = (uint8_t *) 0x1002;
volatile uint8_t * const REG_4 = (uint8_t *) 0x1003;

然后在你的代码中,你可以这样读写寄存器:

uint8_t reg1_val = *REG_1; // read value from register 1
*REG_2 = 0xff;             // write 0xff to register 2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读