举报
在 OpenVINO™ C++ 代码中启用 AddressSanitizer (ASan) 时遇到内存泄漏问题(特别是涉及 ov::Core::compile_model 的泄漏),可以按照以下步骤解决:
ov::Core::compile_model)且不涉及用户代码,可能是库的内部行为。ov::CompiledModel 对象生命周期:确保返回的 ov::CompiledModel 对象及时析构: {
ov::CompiledModel compiled_model = core.compile_model(model, device);
// 使用 compiled_model
} // 离开作用域时自动析构,释放资源ov::Core 或 ov::CompiledModel 存储在全局/静态变量中(可能无法正常析构)。 // 错误示例:静态对象可能无法被 ASan 正确跟踪
static ov::Core core;ov::shutdown(): int main() {
ov::Core core;
// ... 其他代码 ...
ov::shutdown(); // 显式清理全局资源
return 0;
}OV_CORE_CLEANUP:某些版本需要定义环境变量: export OV_CORE_CLEANUP=1 # Linux/macOS
set OV_CORE_CLEANUP=1 # Windowssuppressions 文件忽略 OpenVINO 内部泄漏:asan_suppress.txt:leak:ov::Core::compile_model
leak:operator newexport ASAN_OPTIONS="suppressions=asan_suppress.txt" export ASAN_OPTIONS="detect_leaks=0"ov::Core::compile_model,确保 ov::Core 对象是线程安全的(通过锁或局部实例): std::mutex core_mutex;
void thread_func() {
std::lock_guard lock(core_mutex);
ov::CompiledModel model = core.compile_model(...);
} #include
int main() {
ov::Core core;
auto model = core.read_model("model.xml");
{
auto compiled_model = core.compile_model(model, "CPU");
} // compiled_model 析构
ov::shutdown(); // 显式清理
return 0;
} mkdir build && cd build
cmake -DENABLE_SANITIZER=address ..
make valgrind --leak-check=full ./your_programov::Core 和 ov::CompiledModel。ov::shutdown() 并设置 OV_CORE_CLEANUP。如果问题仍未解决,在 OpenVINO GitHub Issues 提交详细报告(附 ASan 输出和复现代码)。
举报
更多回帖