【问题标题】:Is it safe to use placement new without alocating memory?在不分配内存的情况下使用placement new是否安全?
【发布时间】:2017-09-16 17:44:30
【问题描述】:

我想在内存中的特定位置创建对象,在我的情况下它的地址是 0x64000000,这是外部 ram,我知道这个内存是空的(即没有任何东西从这个内存写入、读取或执行)。 到目前为止,它似乎很稳定。

我在 stm32f4 上运行这个。

像这样使用placement new有什么危险吗,如果有,有没有其他方法可以将对象创建到特定的内存地址中?

【问题讨论】:

  • 如果您的应用程序是唯一使用该内存的应用程序,那么使用placement new 在其中创建对象应该是安全的。请注意,如果您的对象包含您使用的指针(直接或间接),例如new 为其分配内存,那么该内存将不会自动放置在特殊 RAM 中。例如,std::string 对象不会自动将实际的字符串数据放在 RAM 中,而是放在堆中。
  • 应该是安全的,placement new 在embedded programming 中有一些用途。当然,如果不实际查看您所针对的架构的代码,就不可能只陈述。

标签: c++ oop object new-operator


【解决方案1】:

如果您确实知道内存是空的(堆栈和动态存储都没有使用它 - 如果它甚至可用,那么它是安全的。C++ 标准实际上没有任何情况可以保证这样的事情 - 你留给依赖硬件/运行时实现文档。

如果必须将程序移植到其他硬件,则可能需要对其进行更改。它不适用于任何使用虚拟内存的系统。

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多