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.
This commit is contained in:
Paul Eggert 2018-06-16 08:11:37 -07:00
parent 9af399fd80
commit ec1b4d9a51
4 changed files with 9 additions and 23 deletions

View file

@ -507,10 +507,8 @@ function @code{memory-limit} provides information on the total amount of
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

View file

@ -664,6 +664,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

View file

@ -2182,6 +2182,10 @@ It can be retrieved with `(process-get PROCESS PROPNAME)'."
(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.

View file

@ -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);