public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org>
To: cygwin-cvs@sourceware.org
Subject: [newlib-cygwin/main] Cygwin: cygheap: compute bucket instead of looping over it
Date: Fri,  1 Mar 2024 21:37:17 +0000 (GMT)	[thread overview]
Message-ID: <20240301213717.8AB3E385840E@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=abb532a87ff6ed37f6ee2c8a58c65178a15aa345

commit abb532a87ff6ed37f6ee2c8a58c65178a15aa345
Author:     Corinna Vinschen <corinna@vinschen.de>
AuthorDate: Fri Mar 1 22:27:40 2024 +0100
Commit:     Corinna Vinschen <corinna@vinschen.de>
CommitDate: Fri Mar 1 22:35:22 2024 +0100

    Cygwin: cygheap: compute bucket instead of looping over it
    
    Start at index 0 and use 32 bytes as minimal allocation size.
    Reduce NBUCKETS, we don't have such big objects on the
    cygheap anyway.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/local_includes/cygheap.h |  2 +-
 winsup/cygwin/mm/cygheap.cc            | 20 ++++++++++++--------
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/winsup/cygwin/local_includes/cygheap.h b/winsup/cygwin/local_includes/cygheap.h
index b6acdf7f18b7..9edd61c28abd 100644
--- a/winsup/cygwin/local_includes/cygheap.h
+++ b/winsup/cygwin/local_includes/cygheap.h
@@ -487,7 +487,7 @@ struct mini_cygheap
   cygheap_locale locale;
 };
 
-#define NBUCKETS 40
+#define NBUCKETS 32
 
 struct threadlist_t
 {
diff --git a/winsup/cygwin/mm/cygheap.cc b/winsup/cygwin/mm/cygheap.cc
index c763a0967388..4cc851716fbe 100644
--- a/winsup/cygwin/mm/cygheap.cc
+++ b/winsup/cygwin/mm/cygheap.cc
@@ -264,15 +264,15 @@ init_cygheap::init_installation_root ()
 
 /* Initialize bucket_val.  The value is the max size of a block
    fitting into the bucket.  The values are powers of two and their
-   medians: 24, 32, 48, 64, ...
+   medians: 32, 48, 64, 96, ...
    The idea is to have better matching bucket sizes (not wasting
    space) without trading in performance compared to the old powers
    of 2 method. */
 static const uint32_t bucket_val[NBUCKETS] = {
-  0, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048,
-  3072, 4096, 6144, 8192, 12288, 16384, 24576, 32768, 49152, 65536, 98304,
-  131072, 196608, 262144, 393216, 524288, 786432, 1048576, 1572864, 2097152,
-  3145728, 4194304, 6291456, 8388608, 12582912
+  32, 48, 64, 96, 128, 192, 256, 384,
+  512, 768, 1024, 1536, 2048, 3072, 4096, 6144,
+  8192, 12288, 16384, 24576, 32768, 49152, 65536, 98304,
+  131072, 196608, 262144, 393216, 524288, 786432, 1048576, 1572864
 };
 
 void
@@ -355,11 +355,15 @@ static void *
 _cmalloc (unsigned size)
 {
   _cmalloc_entry *rvc;
-  unsigned b;
+  unsigned b = 0;
 
   /* Calculate "bit bucket". */
-  for (b = 1; b < NBUCKETS && bucket_val[b] < size; b++)
-    continue;
+  if (size > bucket_val[0])
+    {
+      const unsigned clz = __builtin_clzl (size - 1);
+      b = (59 - clz) << 1;
+      b -= !((size - 1) & (1 << (62 - clz)));
+    }
   if (b >= NBUCKETS)
     return NULL;

                 reply	other threads:[~2024-03-01 21:37 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240301213717.8AB3E385840E@sourceware.org \
    --to=corinna@sourceware.org \
    --cc=cygwin-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).