Windows - SQLite活动临界区
Windows - SQLite Active Critical Section
我在testlib.dll中使用SQLite3 3.8.8.2,它有一个导出的函数void DoDBOperation(),它只是打开数据库,然后关闭它。我写了一个EXE,使用LoadLibararyEx()加载DLL,调用函数DoDBOperation(),最后使用FreeLibrary()卸载DLL。我在一个循环中这样做了10000次,这会导致内存泄漏。
经过调查,我发现每次加载和卸载testlib.dll时,它都会泄漏一个48字节的临界区DS,这是WinDBG在调查堆后报告的。AppVerifier也报告一个库正在被卸载,并且有一个活动的临界区。
如果我静态链接DLL,这样的泄漏不会发生。我搜索了很多,但没有帮助。我试图调试sqlite3.c,但没有成功地找到泄漏。
有人能提供一些关于这个问题的指针吗?任何帮助都会很感激。谢谢! !
你应该在dll卸载时调用sqlite3_shutdown来正确清理它分配的资源(例如在DLL_PROCESS_DETACH处理程序中)
相关文章:
- 在同步问题中,弱指针可以代替互斥锁或临界区吗?
- 多线程环境下,其他线程永远无法访问临界区
- 如果一个线程在临界区上调用Acquire(),如果另一个线程调用Release(),该锁会被释放吗?
- 是否需要临界区?
- 当我的堆栈加倍时,它会给我临界区错误!_ctrlvalidHeappointer
- 确定Windows线程是否处于临界区或类似的位置
- 这段代码是一个工作的临界区包装器类吗?
- 临界区通过constexpr
- 临界区队列
- 出乎意料的性能提升与OpenMP临界区
- 如何使用Boost创建临界区?
- 临界区最简单的实现
- 由两个线程访问的共享队列的临界区代码是什么?
- c++ 11有临界区吗?
- 如何避免临界区和SendMessage之间的死锁
- Windows临界区公平性
- 线程同步-临界区或互斥锁
- 是否寄存器读/写需要临界区保护
- 如何在两个类之间共享单个临界区
- Windows - SQLite活动临界区