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. > > > > >