事物都有两面性,apr池既可以削除了内存泄漏的问题,又可以减低在非配内存时带来的损耗;那么池的不足有哪些?
·如果要管理的资源的生命周期和Apache中主要对象的生命周期不能对应,往往需要做更多的工作。我们将会在第4章对这个问题进行深入地讨论。
·从池中分配资源不是线程安全(thread safe)的。当Apache运行在一个多线程基础之上时,它使用一个对象(HTTP请求或者TCP连接)所拥有的池,这个池在使用时是线程私有的,大部分的池分配都是通过模块进行的,因此池中分配资源不是线程安全的情况很少。第4章将讨论需要线程安全时的一些情况。
·APR池在它们被释放之前(当然,它们确实是复用内存,因此基于池的应用程序不会无限增长)是不会向操作系统返回内存的。因此在分配非常大的内存块时,有时需要使用malloc函数而不是使用池。相反地,在代码中使用malloc可能会影响二进制兼容性。在Windows系统中,考虑到和运行时库的不兼容性,系统将使用其他不同版本的Visual C++编译的二进制代码和你的代码进行链接。