日期:2014-05-16  浏览次数:21106 次

MySQL C API的内存泄露问题

程序使用MySQL的C API比较频繁,在检查程序内存泄露的时候,想到了API里面会不会有内存泄露的问题。网上说mysql api在使用的时候会出现泄露,有人用了valgrind来测试,找到了可能出现泄露的地方,官方的api文档里面也说到,如果使用完api之后,最好调用mysql_library_end()函数来释放内存。

?

mysql api的官方建议,如果是多线程的时候,最好是在创建线程之前就调用mysql_init()函数,或者使用mutex加锁,因为这个函数不是线程安全的。(具体见:http://docs.oracle.com/cd/E17952_01/refman-5.5-en/mysql-library-init.html)。在我的程序里面是线程池的概念,在循环里面会频繁使用mysql的库去做连接、查询数据库,而线程不会退出。怎么样可以封装一个线程安全且不会内存泄露的mysql查询函数呢?(使用my_init()和mysql_thread_end()?)