hisysevent -l -hiview内存泄露总结
1. 问题现象 hisysevent -l 指令每次执行都会导致 hiview进程 增加700多kb内存 手动杀掉 hiview进程 才能释放清空内存 2. hisysevent -l hiview 交互流程图 3. 内存泄露原因分析 new分配的堆内存块,没有进行主动释放,导致产生内存泄露 4. 实例分析及原因解析 路径:base/hiviewdfx/hiview/base/event_
1. 问题现象
hisysevent -l 指令每次执行都会导致 hiview进程 增加700多kb内存
手动杀掉 hiview进程 才能释放清空内存
2. hisysevent -l hiview 交互流程图
3. 内存泄露原因分析
new分配的堆内存块,没有进行主动释放,导致产生内存泄露
4. 实例分析及原因解析
路径:base/hiviewdfx/hiview/base/event_store/utility/reader/event_entry_creator.cpp
std::shared_ptr<EventRaw::DecodedEvent> EventEntryCreator::BuildDecodedEvent(uint8_t* content, uint32_t contentSize)
{
uint8_t* rawEvent = BuildRawEvent(content, contentSize);
if (rawEvent == nullptr)
{
return nullptr;
}
return std::make_shared<EventRaw::DecodedEvent>(rawEvent);
}
uint8_t* EventEntryCreator::BuildRawEvent(uint8_t* content, uint32_t contentSize)
{
uint32_t eventSize = contentSize - DOC_EVENT_HEADER_SIZE + HISYSEVENT_HEADER_SIZE;
uint8_t* event = new(std::nothrow) uint8_t[eventSize];
if (event == nullptr) {
HIVIEW_LOGE("failed to new memory for raw event, size=%{public}u", eventSize);
return nullptr;
}
...
return event;
}
BuildRawEvent 函数中 通过new的方式 动态申请了内存 作为返回值 uint8_t* 对象, 给 BuildDecodedEvent 进行调用 但是最终没有进行 delete 释放导致内存泄露 使用完后手调用 delele 释放内存 或者 采用智能指针的方式 auto *
更多推荐
所有评论(0)