在不关闭主程序的情况下清理 Stockfish 使用的内存

Cleaning the memory that Stockfish uses without closing the main program

我正在尝试通过静态库将 Stockfish 实施到我自己的项目中。但是我遇到了一个问题。 Stockfish 在“Stockfish”的命名空间中使用了一些全局变量,在我的项目中的某个时刻,我想销毁我从 Stockfish 中使用的所有内容,并在以后重新初始化。

例如,Stockfish 将选项存储在 Stockfish::Options 的全局对象中。当我第一次初始化 Stockfish 时,一切都很好。但是我想要实现的是结束 Stockfish 并从变量中删除它的所有成员而不关闭我的项目并在需要时重新初始化它。

据我了解,Stockfish 并非为此而设计。设计为“启动引擎,关闭主程序时结束引擎”。

所以,我相信我必须经历每一次初始化并找到结束它们的正确方法。在这样做之前,我想问三个问题:

该工具无法轻松释放特定库使用的内存。

  • 不记录静态库边界,并且在运行时不存在(调试符号中可能除外)。

  • 分配器通常不会记录在哪里进行了分配。

  • 命名空间也是如此。名称空间在运行时不存在,调试符号除外。您不能引用命名空间。

有两个简单的解决方案:

  1. 运行 Stockfish 在一个单独的过程中。当进程退出时,所有内存都被释放。这是简单的方法。

  2. 修改 Stockfish 以释放内存。查找所有全局状态和所有分配,并确保您可以释放这些分配并将全局状态重置为初始值。这是困难的方法。