From: trevor_hansen Date: Wed, 2 Feb 2011 12:32:36 +0000 (+0000) Subject: Improvement. Cleanup memory better at the end. X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=f33bc6f734a787acf2b6f97655710fc774042771;p=francis%2Fstp.git Improvement. Cleanup memory better at the end. git-svn-id: https://stp-fast-prover.svn.sourceforge.net/svnroot/stp-fast-prover/trunk/stp@1115 e59a4935-1847-0410-ae03-e826735625c1 --- diff --git a/src/AST/RunTimes.cpp b/src/AST/RunTimes.cpp index 3b02cdc..acee0c4 100644 --- a/src/AST/RunTimes.cpp +++ b/src/AST/RunTimes.cpp @@ -69,8 +69,8 @@ void RunTimes::print() std::cerr << "CPU Time Used : " << Minisat::cpuTime() << "s" << std::endl; std::cerr << "Peak Memory Used: " << Minisat::memUsedPeak() << "MB" << std::endl; + clear(); - // iterator } void RunTimes::addTime(Category c, long milliseconds) diff --git a/src/STPManager/STP.cpp b/src/STPManager/STP.cpp index e1ea855..f544294 100644 --- a/src/STPManager/STP.cpp +++ b/src/STPManager/STP.cpp @@ -270,6 +270,7 @@ namespace BEEV { // Deleting it clears out all the buckets associated with hashmaps etc. too. delete bvsolver; bvsolver = new BVSolver(bm,simp); + auto_ptr bvCleaner(bvsolver); if(bm->UserFlags.stats_flag) simp->printCacheStatus(); diff --git a/src/STPManager/STP.h b/src/STPManager/STP.h index 2437965..fd2551f 100644 --- a/src/STPManager/STP.h +++ b/src/STPManager/STP.h @@ -64,10 +64,10 @@ namespace BEEV ClearAllTables(); delete bvsolver; delete Ctr_Example; - delete arrayTransformer; + delete arrayTransformer; delete tosat; delete simp; - // delete bm; + delete bm; } /**************************************************************** diff --git a/src/STPManager/STPManager.h b/src/STPManager/STPManager.h index f6649fb..d463ffe 100644 --- a/src/STPManager/STPManager.h +++ b/src/STPManager/STPManager.h @@ -413,8 +413,6 @@ namespace BEEV return false; } // End of IntroduceSymbolSet - - bool VarSeenInTerm(const ASTNode& var, const ASTNode& term); ASTNode NewParameterized_BooleanVar(const ASTNode& var, @@ -427,7 +425,7 @@ namespace BEEV // This is called before SAT solving, so only junk that isn't needed // after SAT solving should be cleaned out. - void ClearAllTables(void) + void ClearAllTables(void) { NodeLetVarMap.clear(); NodeLetVarMap1.clear(); @@ -440,8 +438,50 @@ namespace BEEV } //End of ClearAllTables() ~STPMgr() + {} + + // The ASTNodes are garbage collected. This object can only be deleted, when every node has been + // cleaned up already. Unfortunately, some references are remaining somewhere to nodes. The + // destructor will look like this. + void cleanup() { - ClearAllTables(); + delete runTimes; + runTimes = NULL; + ASTFalse = ASTNode(0); + ASTTrue = ASTNode(0); + ASTUndefined = ASTNode(0); + _current_query = ASTNode(0); + dummy_node = ASTNode(0); + + zeroes.clear(); + ones.clear(); + max.clear(); + + Introduced_SymbolsSet.clear(); + NodeLetVarMap.clear(); + NodeLetVarMap1.clear(); + PLPrintNodeSet.clear(); + AlreadyPrintedSet.clear(); + StatInfoSet.clear(); + TermsAlreadySeenMap.clear(); + NodeLetVarVec.clear(); + ListOfDeclaredVars.clear(); + _symbol_unique_table.clear(); + + vector::iterator it = _asserts.begin(); + vector::iterator itend = _asserts.end(); + for(;it!=itend;it++) + { + IntToASTVecMap * j = (*it); + j->clear(); + delete j; + } + _asserts.clear(); + + delete hashingNodeFactory; + } + /* + ClearAllTables(); vector::iterator it = _asserts.begin(); vector::iterator itend = _asserts.end(); @@ -463,7 +503,8 @@ namespace BEEV CONSTANTBV::BitVector_Destroy(CreateBVConstVal); delete hashingNodeFactory; - } + */ + //} };//End of Class STPMgr };//end of namespace #endif diff --git a/src/main/main.cpp b/src/main/main.cpp index e431b16..e53c879 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -15,6 +15,7 @@ #include "../AST/NodeFactory/SimplifyingNodeFactory.h" #include "../parser/ParserInterface.h" #include +#include #ifdef EXT_HASH_MAP @@ -92,12 +93,21 @@ int main(int argc, char ** argv) { STPMgr * bm = new STPMgr(); + Simplifier * simp = new Simplifier(bm); + auto_ptr simpCleaner(simp); + BVSolver* bvsolver = new BVSolver(bm, simp); + ArrayTransformer * arrayTransformer = new ArrayTransformer(bm, simp); + auto_ptr atClearner(arrayTransformer); + ToSAT * tosat = new ToSAT(bm); - AbsRefine_CounterExample * Ctr_Example = - new AbsRefine_CounterExample(bm, simp, arrayTransformer); + auto_ptr tosatCleaner(tosat); + + AbsRefine_CounterExample * Ctr_Example = new AbsRefine_CounterExample(bm, simp, arrayTransformer); + auto_ptr ctrCleaner(Ctr_Example); + itimerval timeout; ParserBM = bm; @@ -109,6 +119,7 @@ int main(int argc, char ** argv) { tosat, Ctr_Example); + //populate the help string helpstring += "STP version : " + version + "\n\n"; @@ -579,12 +590,18 @@ int main(int argc, char ** argv) { } SOLVER_RETURN_TYPE ret = GlobalSTP->TopLevelSTP(asserts, query); - if (bm->UserFlags.quick_statistics_flag) + if (bm->UserFlags.quick_statistics_flag) { bm->GetRunTimes()->print(); } (GlobalSTP->tosat)->PrintOutput(ret); + AssertsQuery->clear(); delete AssertsQuery; + asserts = ASTNode(); + query = ASTNode(); + bm->cleanup(); + + return 0; }//end of Main