Hello Joao!
Thank you!
I do not expect any interesting results from valgrind. As you can see,
memory successfully released with the DOMDocument object release.
What help do you think I can get from valgrind?

пт, 31 мая 2019 г., 1:53 João M. S. Silva <joao.m.santos.si...@gmail.com>:

> Hello Александр,
>
> Have you tried Valgrind?
>
> João M. S. Silva
>
> On 5/29/19 8:24 AM, Александр Федоров wrote:
> > Hello!
> > I have simple program which reuses created document with different
> elements
> > that seems to be leaking. To demonstrate the problem I create new
> > DOMElement, add it to document, then immediately remove it and release. I
> > do it for rather big number of times.
> >
> > Here is the code snippet:
> >
> > #include <xercesc/util/PlatformUtils.hpp>
> > #include <xercesc/dom/DOM.hpp>
> > #include <xercesc/util/XMLString.hpp>
> > #include <iostream>
> > #include <fstream>
> > #include <zconf.h>
> >
> > void process_mem_usage() {
> > double vm = 0.;
> > double rss = 0.;
> >
> > unsigned long vsize;
> > long lrss;
> > {
> > std::string ignore;
> > std::ifstream ifs("/proc/self/stat", std::ios_base::in);
> > ifs >> ignore >> ignore >> ignore >> ignore >> ignore >> ignore >> ignore
> >>> ignore >> ignore >> ignore
> >>> ignore >> ignore >> ignore >> ignore >> ignore >> ignore >> ignore >>
> > ignore >> ignore >> ignore
> >>> ignore >> ignore >> vsize >> lrss;
> > }
> >
> > long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
> > vm = vsize / 1024.;
> > rss = lrss * page_size_kb;
> > std::cout << "VM: " << vm << "; RSS: " << rss << " (Kb)" << std::endl;
> > }
> >
> > int main() {
> >      using namespace xercesc_3_2;
> >
> >      XMLPlatformUtils::Initialize();
> >
> >      XMLCh * const tempStr = new XMLCh[100];
> >      XMLString::transcode("Range", tempStr, 99);
> >      DOMImplementation *impl =
> > DOMImplementationRegistry::getDOMImplementation(tempStr);
> >
> >      XMLString::transcode("root", tempStr, 99);
> >      DOMDocument *doc = impl->createDocument(nullptr, tempStr, nullptr);
> >      DOMElement *root = doc->getDocumentElement();
> >
> >      process_mem_usage();
> >
> >      for(auto i = 0; i < 100; ++i) {
> > for(auto j = 0; j < 1000; ++j) {
> > XMLString::transcode("FirstElement", tempStr, 99);
> > DOMElement *el = doc->createElement(tempStr);
> > root->appendChild(el);
> >
> > auto removed = (DOMElement *) root->removeChild(el);
> > removed->release();
> > }
> > process_mem_usage();
> > }
> >
> > doc->release();
> > process_mem_usage();
> > delete[] tempStr;
> > process_mem_usage();
> >
> > XMLPlatformUtils::Terminate()
> > return 0;
> > }
> >
> > So I expect RSS to be unchanged or quite stable, but it rises
> continuously.
> >
> >
>

Reply via email to