source: src/Helpers/MemDebug.hpp@ 0e2031

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 0e2031 was f4d063, checked in by Frederik Heber <heber@…>, 14 years ago

MEMFIX: MemDebug ignores all unknown sources. Removed all dependencies around main(), moved to builder_init.?pp.

  • this has been an attempt to fix the warning of a memory leak that actually results into the libboost_filesystem.so over which we have no control. As of now, i I do not quite look through the whole affair. That is, I have a now idea why Till's new memory allocator is used during the initialization of some external library already, but apparently it must have to do with lookup tables present in the exectuable already. Hence, we can not do much about.
  • Nonetheless, we split up main() into some initializating functions which have been outsourced to builder_init.cpp.
  • The only fix then is that we ignore all values of unknown source in MemDebug.
  • Note: We only do accouting of stuff allocated on the heap (e.g. int *test = new int;) and not on stack (int test;)! However, stack space is limited anyway.
  • Property mode set to 100644
File size: 2.8 KB
Line 
1/*
2 * MemDebug.hpp
3 *
4 * Created on: Apr 28, 2010
5 * Author: crueger
6 */
7
8#ifndef MEMDEBUG_HPP_
9#define MEMDEBUG_HPP_
10
11/**
12 * @file
13 * This module allows easy automatic memory tracking. Link this module to replace the
14 * operators new, new[], delete and delete[] with custom versions that add tracking
15 * information to allocated blocks.
16 *
17 * All tracking is done in O(1) for new and delete operators. Summaries for the
18 * used memory take O(N), where N is the number of currently allocated memory chunks.
19 *
20 * To use full tracking including file name and line number include this file in
21 * your sourcefiles.
22 */
23
24// Set all flags in a way that makes sense
25
26// NDEBUG implies NO_MEMDEBUG
27#ifdef NDEBUG
28# ifndef NO_MEMDEBUG
29# define NO_MEMDEBUG
30# endif
31#endif
32
33// NO_MEMDEBUG and MEMDEBUG are mutually exclusive, but at least one must be set
34#ifdef NO_MEMDEBUG
35# ifdef MEMDEBUG
36# undef MEMDEBUG
37# endif
38#else
39# ifndef MEMDEBUG
40# define MEMDEBUG
41# endif
42#endif
43
44#ifdef MEMDEBUG
45
46#include <new>
47
48// some light header files, that do weird new stuff and therefore need
49// to be loaded before the define
50#include <string>
51#include <boost/optional.hpp>
52#include <boost/shared_ptr.hpp>
53#include <boost/function.hpp>
54
55
56namespace Memory {
57
58 /**
59 * Displays a short summary of the memory state.
60 */
61 void getState();
62 void dumpMemory(std::ostream&);
63
64 void _ignore(void*);
65
66 /**
67 * Use this to disable memory for a certain pointer on the heap.
68 * This is useful for pointers which should live over the run of the
69 * program, and which are deleted automatically at the end. Usually these
70 * pointers should be wrapped inside some kind of smart pointer to
71 * ensure destruction at the end.
72 */
73 template <typename T>
74 T *ignore(T* ptr){
75 _ignore((void*)ptr);
76 return ptr;
77 }
78}
79#ifdef __GNUC__
80void *operator new (size_t nbytes,const char* file, int line, const char* func) throw(std::bad_alloc);
81void *operator new[] (size_t nbytes,const char* file, int line, const char* func) throw(std::bad_alloc);
82#else
83void *operator new (size_t nbytes,const char* file, int line) throw(std::bad_alloc);
84void *operator new[] (size_t nbytes,const char* file, int line) throw(std::bad_alloc);
85#endif
86void operator delete (void *ptr,const char*, int) throw();
87void operator delete[] (void *ptr,const char*, int) throw();
88
89
90
91/**
92 * This macro replaces all occurences of the keyword new with a replaced
93 * version that allows tracking.
94 */
95#ifdef __GNUC__
96#define new new(__FILE__,__LINE__,__PRETTY_FUNCTION__)
97#else
98#define new new(__FILE__,__LINE__)
99#endif
100
101#else
102
103#include <iosfwd>
104
105// memory debugging was disabled
106
107namespace Memory {
108 inline void getState(){};
109
110 inline void dumpMemory(std::ostream&){};
111
112 template <typename T>
113 inline T *ignore(T* ptr){
114 return ptr;
115 }
116}
117
118#endif
119
120
121#endif /* MEMDEBUG_HPP_ */
Note: See TracBrowser for help on using the repository browser.