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

前端之家收集整理的这篇文章主要介绍了c – 如何在内存中的特定位置存储值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
也许这是一个容易的问题,但我真的很想知道它.

如果我想在内存(堆中)的特定地址上存储一个值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
原文链接:https://www.f2er.com/c/115406.html

猜你在找的C&C++相关文章