aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-12-24 21:19:20 +0000
committerUlrich Drepper <drepper@redhat.com>2006-12-24 21:19:20 +0000
commit48576885c60208837ec07da027d9092f125e78eb (patch)
treeaf0bdbb1b9687f7312862adb3ed46bdc2148dfdf
parent3b6667a4abedaa82ff7392380ffecbe478ed3a69 (diff)
downloadglibc-48576885c60208837ec07da027d9092f125e78eb.zip
glibc-48576885c60208837ec07da027d9092f125e78eb.tar.gz
glibc-48576885c60208837ec07da027d9092f125e78eb.tar.bz2
* malloc/malloc.c (sYSMALLOc): Remove some unnecessary alignment
attempts.
-rw-r--r--ChangeLog5
-rw-r--r--malloc/malloc.c22
2 files changed, 23 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 3da106b..74a5ae2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-24 Ulrich Drepper <drepper@redhat.com>
+
+ * malloc/malloc.c (sYSMALLOc): Remove some unnecessary alignment
+ attempts.
+
2006-12-23 Ulrich Drepper <drepper@redhat.com>
* posix/wordexp.c: Remove some unnecessary tests.
diff --git a/malloc/malloc.c b/malloc/malloc.c
index d15ed57..6427608 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -2896,7 +2896,13 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
is one SIZE_SZ unit larger than for normal chunks, because there
is no following chunk whose prev_size field could be used.
*/
+#if 1
+ /* See the front_misalign handling below, for glibc there is no
+ need for further alignments. */
+ size = (nb + SIZE_SZ + pagemask) & ~pagemask;
+#else
size = (nb + SIZE_SZ + MALLOC_ALIGN_MASK + pagemask) & ~pagemask;
+#endif
tried_mmap = true;
/* Don't try if size wraps around 0 */
@@ -2914,6 +2920,12 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
address argument for later munmap in free() and realloc().
*/
+#if 1
+ /* For glibc, chunk2mem increases the address by 2*SIZE_SZ and
+ MALLOC_ALIGN_MASK is 2*SIZE_SZ-1. Each mmap'ed area is page
+ aligned and therefore definitely MALLOC_ALIGN_MASK-aligned. */
+ assert (((INTERNAL_SIZE_T)chunk2mem(mm) & MALLOC_ALIGN_MASK) == 0);
+#else
front_misalign = (INTERNAL_SIZE_T)chunk2mem(mm) & MALLOC_ALIGN_MASK;
if (front_misalign > 0) {
correction = MALLOC_ALIGNMENT - front_misalign;
@@ -2921,10 +2933,12 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
p->prev_size = correction;
set_head(p, (size - correction) |IS_MMAPPED);
}
- else {
- p = (mchunkptr)mm;
- set_head(p, size|IS_MMAPPED);
- }
+ else
+#endif
+ {
+ p = (mchunkptr)mm;
+ set_head(p, size|IS_MMAPPED);
+ }
/* update statistics */