繁体   English   中英

在 Go + SWIG + C++ 代码中清理 memory 管理

[英]Sanitizing memory management in Go + SWIG + C++ code

我正在通过 SWIG 使用来自 Go 的 C++ 库。 SWIG 不负责 memory 管理,因此 Go 端看起来像这样:

f := NewFoo()
defer DeleteFoo(f)

在我创建f时调用DeleteFoo(f)很容易,但是对于 C++ 函数的返回值,很容易忽略它。

我想自动检查我的代码是否正确。

我看到为 GCC 和 Clang 实施了 Address Sanitizer,这听起来是正确的。 但是我找不到明确的方法来说明如何为我的go test命令启用它。

我认为CC="clang -fsanitize=address" go testCC="gcc -fsanitize=address" go test应该有效。

Defer在块内的工作(函数等)中非常有用。 然而,这并不总是足够的。
你需要什么runtime.SetFinalizer

直接,我认为您无法使用 Go 检查其他任何东西的 memory 状态。 (所以 memory 分配在 C 或 C++ 中。)

如果我是你,我会将 C 代码的一部分编译为共享。 稍后使用 clang 之类的工具对我来说很容易检查。 如果您的 C 代码显示没有问题,则您无法干扰 Go 的 gc。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM