C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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

大佬总结

以上是大佬教程为你收集整理的c – 如何在内存中的特定位置存储值?全部内容,希望文章能够帮你解决c – 如何在内存中的特定位置存储值?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: