diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2017-03-08 12:00:42 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2017-03-08 12:55:06 +0100 |
commit | 152397e641e9d1e6a11f80e24f562c4cf2472a2f (patch) | |
tree | 123d37284beabd60402de7df416c1e643b5ffbfe /src/interface-gtk/Makefile.am | |
parent | f4da329a1afa4808cbd47182a86cc2b19bcaa984 (diff) | |
download | sciteco-152397e641e9d1e6a11f80e24f562c4cf2472a2f.tar.gz |
yet another revision of memory limiting: the glibc mallinfo() approach has been shown to be unacceptably broken, so the fallback implementation has been improved
* mallinfo() is not only broken on 64-bit systems but slows things
down linearilly to the memory size of the process.
E.g. after 500000<%A>, SciTECO will act sluggish! Shutting down
afterwards can take minutes...
mallinfo() was thus finally discarded as a memory measurement
technique.
* Evaluating /proc/self/statm? has also been evaluated and discarded
because doing this frequently is even slower.
* Instead, the fallback implementation has been drastically improved:
* If possible use C++14 global sized deallocators, allowing memory measurements
across the entire C++ code base with minimal runtime overhead.
Since we only depend on C++11, a lengthy Autoconf check had to be introduced.
* Use malloc_usable_size() with global non-sized deallocators to
measure the approx. memory usage of the entire process (at least
the ones done via C++).
The cheaper C++11 sized deallocators implemented via SciTECO::Object still
have precedence, so this affects Scintilla code only.
* With both improvements the test case
sciteco -e '<@EU[X^E\a]"^E\a"%a>'
is handled sufficiently well now on glibc and performance is much better
now.
* The jemalloc-specific technique has been removed since it no longer
brings any benefits compared to the improved fallback technique.
Even the case of using malloc_usable_size() in strict C++ mode is
up to 3 times faster.
* The new fallback implementation might actually be good enough for
Windows as well if some MSVCRT-specific support is added, like
using _msize() instead of malloc_usable_size().
This must be tested and benchmarked, so we keep the Windows-specific
implementation for the time being.
Diffstat (limited to 'src/interface-gtk/Makefile.am')
-rw-r--r-- | src/interface-gtk/Makefile.am | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/interface-gtk/Makefile.am b/src/interface-gtk/Makefile.am index dc4da3a..aa42871 100644 --- a/src/interface-gtk/Makefile.am +++ b/src/interface-gtk/Makefile.am @@ -5,6 +5,9 @@ AM_CXXFLAGS = -std=c++11 -Wall -Wno-char-subscripts if CLANG AM_CXXFLAGS += -Wno-mismatched-tags endif +if HAVE_SIZED_DEALLOCATION +AM_CXXFLAGS += -fsized-deallocation +endif EXTRA_DIST = gtk-info-popup.gob \ gtk-canonicalized-label.gob |