]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow the Windows build to use upto 2GB of heap.
authorEli Zaretskii <eliz@gnu.org>
Fri, 29 Apr 2011 14:23:44 +0000 (17:23 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 29 Apr 2011 14:23:44 +0000 (17:23 +0300)
 src/w32heap.c (allocate_heap) [USE_LISP_UNION_TYPE || USE_LSB_TAG]:
 New version that can reserve upto 2GB of heap space.
 etc/NEWS: Mention the new feature.

etc/NEWS
src/ChangeLog
src/w32heap.c

index b9743649b9391fd70017ef6dcfcf4395065ff386..c3e746127f1a30b2bb432a5a958184eabc9c4732 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -139,6 +139,11 @@ starting from the first line of text below the header line.
 ** The nextstep port can have different modifiers for the left and right
 alt/option key by customizing the value for ns-right-alternate-modifier.
 
+** The MS-Windows port can now use more than 500MB of heap.
+Depending on the available virtual memory, Emacs on Windows can now
+have up to 2GB of heap space.  This allows, e.g., to visit several
+large (> 256MB) files in the same session.
+
 \f
 * Installation Changes in Emacs 23.2
 
index b6f962f45232699b76fd541dd9bf5a36e6bb3f0d..42d9185e0dd12fae0c913e652ef5d70c2e3cd8a9 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-29  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32heap.c (allocate_heap) [USE_LISP_UNION_TYPE || USE_LSB_TAG]:
+       New version that can reserve upto 2GB of heap space.
+
 2011-04-26  Chong Yidong  <cyd@stupidchicken.com>
 
        * nsfns.m (Fns_read_file_name): Doc fix (Bug#8534).
index b5b18919a4af385de49fcd4738868623f8b3da72..91bc8133b20078d7e29771a091148fb5dbeae9b1 100644 (file)
@@ -119,6 +119,7 @@ get_data_end (void)
   return data_region_end;
 }
 
+#if !defined (USE_LISP_UNION_TYPE) && !defined (USE_LSB_TAG)
 static char *
 allocate_heap (void)
 {
@@ -145,9 +146,31 @@ allocate_heap (void)
 
   return ptr;
 }
+#else  /* USE_LISP_UNION_TYPE || USE_LSB_TAG */
+static char *
+allocate_heap (void)
+{
+  unsigned long size = 0x80000000; /* start by asking for 2GB */
+  void *ptr = NULL;
+
+  while (!ptr && size > 0x00100000)
+    {
+      reserved_heap_size = size;
+      ptr = VirtualAlloc (NULL,
+                         get_reserved_heap_size (),
+                         MEM_RESERVE,
+                         PAGE_NOACCESS);
+      size -= 0x00800000; /* if failed, decrease request by 8MB */
+    }
+
+  return ptr;
+}
+#endif /* USE_LISP_UNION_TYPE || USE_LSB_TAG */
 
 
-/* Emulate Unix sbrk.  */
+/* Emulate Unix sbrk.  Note that ralloc.c expects the return value to
+   be the address of the _start_ (not end) of the new block in case of
+   success, and zero (not -1) in case of failure.  */
 void *
 sbrk (unsigned long increment)
 {