Huge increase in memory usage with Debug binary [modified]
-
Hi All, I added virtual copy constructor for quite a few classes. I see a drastic difference in memory usage before and after the change, that too only with debug binary. When I ran release binary the memory usage is almost the same. Here below are the memory statistics Before Change ------------- Peak Mem Usage & VM Size for Debug binary is: 15 MB & 10.5 MB Peak Mem Usage & VM Size for Release binary is: 11.5 MB & 8 MB After Change ------------- Peak Mem Usage & VM Size for Debug binary is: 29 MB & 26 MB Peak Mem Usage & VM Size for Release binary is: 12 MB & 8.5 MB Is it the case virtual copy constructor makes debug binary use more space? Thanks and Regards, Nani -- modified at 4:39 Wednesday 6th June, 2007
-
Hi All, I added virtual copy constructor for quite a few classes. I see a drastic difference in memory usage before and after the change, that too only with debug binary. When I ran release binary the memory usage is almost the same. Here below are the memory statistics Before Change ------------- Peak Mem Usage & VM Size for Debug binary is: 15 MB & 10.5 MB Peak Mem Usage & VM Size for Release binary is: 11.5 MB & 8 MB After Change ------------- Peak Mem Usage & VM Size for Debug binary is: 29 MB & 26 MB Peak Mem Usage & VM Size for Release binary is: 12 MB & 8.5 MB Is it the case virtual copy constructor makes debug binary use more space? Thanks and Regards, Nani -- modified at 4:39 Wednesday 6th June, 2007
mandanani wrote:
I added virtual copy constructor...
How?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
Hi All, I added virtual copy constructor for quite a few classes. I see a drastic difference in memory usage before and after the change, that too only with debug binary. When I ran release binary the memory usage is almost the same. Here below are the memory statistics Before Change ------------- Peak Mem Usage & VM Size for Debug binary is: 15 MB & 10.5 MB Peak Mem Usage & VM Size for Release binary is: 11.5 MB & 8 MB After Change ------------- Peak Mem Usage & VM Size for Debug binary is: 29 MB & 26 MB Peak Mem Usage & VM Size for Release binary is: 12 MB & 8.5 MB Is it the case virtual copy constructor makes debug binary use more space? Thanks and Regards, Nani -- modified at 4:39 Wednesday 6th June, 2007
-
I thought constructors couldn't be virtual, since they require complete information to create the object.
Cyrilix wrote:
I thought constructors couldn't be virtual, since they require complete information to create the object.
You are correct, hence my question to him as to how he managed to pull this off.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
Hi All, I added virtual copy constructor for quite a few classes. I see a drastic difference in memory usage before and after the change, that too only with debug binary. When I ran release binary the memory usage is almost the same. Here below are the memory statistics Before Change ------------- Peak Mem Usage & VM Size for Debug binary is: 15 MB & 10.5 MB Peak Mem Usage & VM Size for Release binary is: 11.5 MB & 8 MB After Change ------------- Peak Mem Usage & VM Size for Debug binary is: 29 MB & 26 MB Peak Mem Usage & VM Size for Release binary is: 12 MB & 8.5 MB Is it the case virtual copy constructor makes debug binary use more space? Thanks and Regards, Nani -- modified at 4:39 Wednesday 6th June, 2007
Besides the question that needs an answer (what the heck is a virtual copy constructor???) the memory usage increase was hardly "drastic". Is there a reason you're worried about how much memory (even if you could get an accurate measurement of it) your app is using in a debug configuration? Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
-
mandanani wrote:
I added virtual copy constructor...
How?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
You mean in what way I added virtual copy constructor? Here below is the code: CValueObjectBase* CashflowVO::clone() const { return new CashflowVO(*this); } Here CValueObjectBase is base class and clone method is pure virtual method. The clone method of derived class copies the object and return base class pointer. Hope I have provided the right information.
-
Besides the question that needs an answer (what the heck is a virtual copy constructor???) the memory usage increase was hardly "drastic". Is there a reason you're worried about how much memory (even if you could get an accurate measurement of it) your app is using in a debug configuration? Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
Yes. The statistics I provided here are for sample data. When I ran my applicaiton with full production data the debug binary consumes 1.5 GB of virtual memory. Before the change the debug binary used to consume around 700 MB memory. There is not much difference in memory usage with release binary before and after the change. I want to know whether virtual copy constructor adds more symbols to debug binary. Thanks, Nani
-
Cyrilix wrote:
I thought constructors couldn't be virtual, since they require complete information to create the object.
You are correct, hence my question to him as to how he managed to pull this off.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
Actually, this is a method which does the job of constructor. Here below is the code snippet: class CashflowVO derived from CValueObjectBase >>>>>>>>>>>>>>>>>>>> CValueObjectBase* CashflowVO::clone() const { return new CashflowVO(*this); } >>>>>>>>>>>>>>>>>>>> Clone methos is pure virtual method in CValueObjectBase. The below code calls the respective clone method of derived object. Here pValueObjectBaseOrg can be any of the derived class, but respective object is getting copied and pointer is returned to pValueObjectBase. >>>>>>>>>>>>>>>>>>>> CValueObjectBase * m_pValueObjectBase = m_pValueObjectBaseOrg->clone(); >>>>>>>>>>>>>>>>>>>> Hope I make sense here.