summaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2008-02-27 19:10:02 +0000
committerNicholas Clark <nick@ccl4.org>2008-02-27 19:10:02 +0000
commit641071807211a3969bcad26ac3f2a39f4550a11c (patch)
treef8d7cf2e1c8f223acae107e41f2361248172d699 /malloc.c
parent4fd0a9b8690ace1bad89926e6d018a6f863761c3 (diff)
downloadperl-641071807211a3969bcad26ac3f2a39f4550a11c.tar.gz
Add Perl_malloc_good_size to malloc.c. (A routine that rounds up the
passed in request to the size that will actually be allocated. It's the same interface as Darwin already provides with malloc_good_size().) p4raw-id: //depot/perl@33389
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c50
1 files changed, 34 insertions, 16 deletions
diff --git a/malloc.c b/malloc.c
index 46a80a4ecd..682eeb6278 100644
--- a/malloc.c
+++ b/malloc.c
@@ -1404,23 +1404,12 @@ cmp_pat_4bytes(unsigned char *s, size_t nbytes, const unsigned char *fill)
# define FILLCHECK_DEADBEEF(s, n) ((void)0)
#endif
-Malloc_t
-Perl_malloc(register size_t nbytes)
+int
+S_ajust_size_and_find_bucket(size_t *nbytes_p)
{
- dVAR;
- register union overhead *p;
- register int bucket;
- register MEM_SIZE shiftr;
-
-#if defined(DEBUGGING) || defined(RCHECK)
- MEM_SIZE size = nbytes;
-#endif
-
- BARK_64K_LIMIT("Allocation",nbytes,nbytes);
-#ifdef DEBUGGING
- if ((long)nbytes < 0)
- croak("%s", "panic: malloc");
-#endif
+ MEM_SIZE shiftr;
+ int bucket;
+ size_t nbytes = *nbytes_p;
/*
* Convert amount of memory requested into
@@ -1455,6 +1444,28 @@ Perl_malloc(register size_t nbytes)
while (shiftr >>= 1)
bucket += BUCKETS_PER_POW2;
}
+ *nbytes_p = nbytes;
+ return bucket;
+}
+
+Malloc_t
+Perl_malloc(size_t nbytes)
+{
+ dVAR;
+ register union overhead *p;
+ register int bucket;
+
+#if defined(DEBUGGING) || defined(RCHECK)
+ MEM_SIZE size = nbytes;
+#endif
+
+ BARK_64K_LIMIT("Allocation",nbytes,nbytes);
+#ifdef DEBUGGING
+ if ((long)nbytes < 0)
+ croak("%s", "panic: malloc");
+#endif
+
+ bucket = S_ajust_size_and_find_bucket(&nbytes);
MALLOC_LOCK;
/*
* If nothing in hash bucket right now,
@@ -2376,6 +2387,13 @@ Perl_malloced_size(void *p)
return BUCKET_SIZE_REAL(bucket);
}
+
+MEM_SIZE
+Perl_malloc_good_size(size_t wanted)
+{
+ return BUCKET_SIZE_REAL(S_ajust_size_and_find_bucket(&wanted));
+}
+
# ifdef BUCKETS_ROOT2
# define MIN_EVEN_REPORT 6
# else