Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Solaris进程内存使用率增加,但不会永远增加_C++_Memory Leaks_Solaris_Rogue Wave - Fatal编程技术网

C++ Solaris进程内存使用率增加,但不会永远增加

C++ Solaris进程内存使用率增加,但不会永远增加,c++,memory-leaks,solaris,rogue-wave,C++,Memory Leaks,Solaris,Rogue Wave,在Solaris 10上,我有一个具有奇怪行为的多线程进程。它管理复杂的C++结构(RWTVAR或RWPTR)。这些结构是根据存储在数据库中的数据构建的(使用Pro*C)。这个过程每小时都在数据库中寻找新信息,在内存中构建新结构,并释放旧数据。但是,每次它重复这个过程,进程内存使用量就会增加几MB(12/16MB)。进程的内存使用量从100M开始,一直到接近1,4G。就在这一点上,进程似乎存在内存泄漏。但奇怪的是,在这一点之后,这个过程停止,继续成长。当我试图寻找内存泄漏(使用Purify工具)

在Solaris 10上,我有一个具有奇怪行为的多线程进程。它管理复杂的C++结构(RWTVAR或RWPTR)。这些结构是根据存储在数据库中的数据构建的(使用Pro*C)。这个过程每小时都在数据库中寻找新信息,在内存中构建新结构,并释放旧数据。但是,每次它重复这个过程,进程内存使用量就会增加几MB(12/16MB)。进程的内存使用量从100M开始,一直到接近1,4G。就在这一点上,进程似乎存在内存泄漏。但奇怪的是,在这一点之后,这个过程停止,继续成长。当我试图寻找内存泄漏(使用Purify工具)时,这个过程并没有长大,也没有出现明显的泄漏。是否有人发现了类似的行为或可以解释可能发生的情况?

在释放内存时,操作系统可能不会真正“扔掉”旧内存页,因为如果操作系统不必分配更多页面,应用程序分配更多内存的速度会更快。但是,当然只能达到一个极限。

在释放内存时,操作系统可能不会真正“丢弃”旧内存页,因为如果操作系统不必分配更多页面,应用程序分配更多内存的速度会更快。但当然只能达到一个极限。

@JoachimPileborg你应该回答这个问题。我觉得这是正确的答案。@JoachimPileborg你应该回答这个问题。对我来说,听起来是正确的答案。不仅仅是“可能”。这是记录在案的行为。Solaris上的
free()
手册页显示“…已执行,此空间可供应用程序进一步分配,但不会返回到系统。”请参见“是”,这就是问题所在:新的malloc操作必须重用以前释放的内存,但似乎没有发生。在正常执行过程中,进程在处理时可能会增长一点,因为这样会重用内存。在我的例子中,为什么没有发生?在新的测试之后,我发现稳定点(1.4G)取决于我在每个操作中必须分配的内存量。如果我尝试在同一个操作中分配更大的结构,那么进程将达到最大4G可寻址能力(这是一个32位应用程序)和最大内存。非常感谢。不仅仅是“可能”。这是记录在案的行为。Solaris上的
free()
手册页显示“…已执行,此空间可供应用程序进一步分配,但不会返回到系统。”请参见“是”,这就是问题所在:新的malloc操作必须重用以前释放的内存,但似乎没有发生。在正常执行过程中,进程在处理时可能会增长一点,因为这样会重用内存。在我的例子中,为什么没有发生?在新的测试之后,我发现稳定点(1.4G)取决于我在每个操作中必须分配的内存量。如果我尝试在同一个操作中分配更大的结构,那么进程将达到最大4G可寻址能力(这是一个32位应用程序)和最大内存。谢谢。