【问题标题】:How to safely set a void* to a specific address c++如何安全地将 void* 设置为特定地址 c++
【发布时间】:2014-05-13 01:52:18
【问题描述】:

我读过几篇文章,建议不要将 int 转换为 void* 或将 void* 转换为 int。我需要设置一个指向特定地址的指针,而我知道的唯一方法是......

#define MEMORY_ALLOC_START_ADDR 0x7E00
void * address = (void*)MEMORY_ALLOC_START_ADDR;

这是安全和“适当的”吗?我只需要转换为 void* ,反之亦然。我能想到分配它的唯一其他方法是使用扩展的内联汇编。我这样问是为了避免以后遇到意想不到的问题。

【问题讨论】:

  • 你如何验证你的固定内存地址每次都是正确的。代码看起来不错,但我认为在地址位置使用一些固定数字不是一个好主意。
  • 您在做某种微控制器或 SOC 设备编程吗?我怀疑这些文章可能是为“大多数”开发人员的角度而写的,例如,没有考虑到某些没有 MMU 的低级嵌入式系统。也许您可以发布链接以获取上下文?
  • @MantoshKumar 实模式而不是保护模式。我别无选择,只能使用固定地址
  • @AndrewMcDonnell 在切换到保护模式之前,它实际上是一个引导加载程序。我会看看我是否可以再次找到这些链接,但我认为它们指的是用户模式应用程序环境。给我一点时间来搜索我的历史链接
  • @user3141117:如果您知道您的固定地址是有效的,那么您的代码就可以了。

标签: c++ memory void-pointers


【解决方案1】:

应该没问题,只要该地址在您定位的任何系统上都是有效的。

一般来说,void*int 之间的转换可能会在两种类型大小不同时导致失败(例如在 x64 上,void* 是 64 位,int 只有 32 位 - 转换void*int 会损失一半的价值。

【讨论】:

  • 在 C++ 中,reinterpret_cast<> 不是优于 C 风格转换吗?
猜你喜欢
  • 1970-01-01
  • 2014-07-14
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2017-11-12
  • 2013-11-11
  • 2023-01-28
相关资源
最近更新 更多