【问题标题】:How to free the heap memory allocated for String class member without deleting the object如何在不删除对象的情况下释放为 String 类成员分配的堆内存
【发布时间】:2023-01-15 03:56:06
【问题描述】:

我有一个类 BLEValue,它有一个名为 m_accumulation 的成员,类型为 String。我使用这个成员来累积通过蓝牙接收到的数据(15000 字节),直到接收到整个数据,然后这个m_accumulation 将被读取并且不再需要它保存的数据因此它被设置为""

void BLEValue::addPart(uint8_t *pData, size_t length)
{
    log_v("Adding part to m_accumulation. Current free heap: %d", ESP.getFreeHeap());
    m_accumulation += std::string((char *)pData, length);
}

void BLEValue::clear()
{
    m_accumulation = "";
    m_accumulation.clear(); // I think it does the same as the previous line
}

问题是在清空m_accumulation 后,为此类成员在堆中分配的内存将不会再次释放。我可以使用函数ESP.getFreeHeap() 来检查它。我认为这是因为 BLEValue 类的对象仍然存在,因此为其分配的堆内存在对象被杀死之前不会被释放。是真的吗?

有没有办法在读取它的值后清空分配给这个String的堆内存而不完全删除BLEValue对象?

【问题讨论】:

    标签: c++ string heap-memory


    【解决方案1】:

    Clear 将字符串标记为大小为 0,但不一定会更改内部数组。要强制字符串释放它的内存,请在清除后使用shrink_to_fit

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2016-11-27
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多