From 52f4585c1353c3c12079bc7bfe85ef44755134db Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 15 Jun 2018 18:05:28 -0700 Subject: [PATCH 1/2] Rewrite memory-limit in Lisp Have it return Emacs virtual memory size, not the sbrk value which is often useless newadays. * doc/lispref/internals.texi (Garbage Collection): * etc/NEWS: Document this. * lisp/subr.el (memory-limit): New implementation in Lisp, written in terms of process-attributes, and which returns virtual memory size. * src/alloc.c (Fmemory_limit): Remove C implementation. --- doc/lispref/internals.texi | 6 ++---- etc/NEWS | 3 +++ lisp/subr.el | 4 ++++ src/alloc.c | 19 ------------------- 4 files changed, 9 insertions(+), 23 deletions(-) diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi index 9cf1a4f9a3..faaf26f4f7 100644 --- a/doc/lispref/internals.texi +++ b/doc/lispref/internals.texi @@ -507,10 +507,8 @@ Garbage Collection memory Emacs is currently using. @defun memory-limit -This function returns the address of the last byte Emacs has allocated, -divided by 1024. We divide the value by 1024 to make sure it fits in a -Lisp integer. - +This function returns an estimate of the total amount of bytes of +virtual memory that Emacs is currently using, divided by 1024. You can use this to get a general idea of how your actions affect the memory usage. @end defun diff --git a/etc/NEWS b/etc/NEWS index e89402db13..30409a89b5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -656,6 +656,9 @@ socket has been passed to Emacs (Bug#24218). instead of just Microsoft platforms. This fixes a 'get-free-disk-space' bug on OS X 10.8 and later (Bug#28639). ++++ +** 'memory-limit' now returns a better estimate of memory consumption. + +++ ** New macro 'combine-change-calls' arranges to call the change hooks ('before-change-functions' and 'after-change-functions') just once diff --git a/lisp/subr.el b/lisp/subr.el index 914112ccef..e4da2b2075 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2182,6 +2182,10 @@ process-put (set-process-plist process (plist-put (process-plist process) propname value))) +(defun memory-limit () + "Return an estimate of Emacs virtual memory usage, divided by 1024." + (or (cdr (assq 'vsize (process-attributes (emacs-pid)))) 0)) + ;;;; Input and display facilities. diff --git a/src/alloc.c b/src/alloc.c index 7b2140501e..52620a54ac 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -7120,24 +7120,6 @@ or memory information can't be obtained, return nil. */) /* Debugging aids. */ -DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0, - doc: /* Return the address of the last byte Emacs has allocated, divided by 1024. -This may be helpful in debugging Emacs's memory usage. -We divide the value by 1024 to make sure it fits in a Lisp integer. */) - (void) -{ - Lisp_Object end; - -#if defined HAVE_NS || defined __APPLE__ || !HAVE_SBRK - /* Avoid warning. sbrk has no relation to memory allocated anyway. */ - XSETINT (end, 0); -#else - XSETINT (end, (intptr_t) (char *) sbrk (0) / 1024); -#endif - - return end; -} - DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0, doc: /* Return a list of counters that measure how much consing there has been. Each of these counters increments for a certain kind of object. @@ -7495,7 +7477,6 @@ The time is in seconds as a floating point value. */); defsubr (&Smake_finalizer); defsubr (&Spurecopy); defsubr (&Sgarbage_collect); - defsubr (&Smemory_limit); defsubr (&Smemory_info); defsubr (&Smemory_use_counts); defsubr (&Ssuspicious_object); -- 2.17.1