Commit 5e1c8f73ae98d35de8101477fe64e01403811e4f
1 parent
e905bad9
fix optimization for GNU memory management
Showing
1 changed file
with
10 additions
and
6 deletions
@@ -736,7 +736,6 @@ TR_malloc(size_t size) | @@ -736,7 +736,6 @@ TR_malloc(size_t size) | ||
736 | { | 736 | { |
737 | struct memSegment * seg = NULL; | 737 | struct memSegment * seg = NULL; |
738 | long psize = sysconf(_SC_PAGESIZE); | 738 | long psize = sysconf(_SC_PAGESIZE); |
739 | - size_t check; | ||
740 | 739 | ||
741 | size += sizeof(struct memSegment); | 740 | size += sizeof(struct memSegment); |
742 | 741 | ||
@@ -746,12 +745,17 @@ TR_malloc(size_t size) | @@ -746,12 +745,17 @@ TR_malloc(size_t size) | ||
746 | size = ((size / psize) + 1) * psize; | 745 | size = ((size / psize) + 1) * psize; |
747 | } | 746 | } |
748 | } else { | 747 | } else { |
749 | - check = size >> 1; | ||
750 | - check = (size | check) - check; | 748 | + if (size < 8) { |
749 | + size = 8; | ||
750 | + } else { | ||
751 | + size_t check = size; | ||
752 | + size_t mask = 1; | ||
753 | + | ||
754 | + while (check >>= 1) { | ||
755 | + mask = (mask << 1) | 1; | ||
756 | + } | ||
751 | 757 | ||
752 | - if (check != size) { | ||
753 | - // size is not a power of 2 so bring it to one. | ||
754 | - size = ((size << 1) | size) - size; | 758 | + size = (size << 1) & ~mask; |
755 | } | 759 | } |
756 | } | 760 | } |
757 | 761 |
Please
register
or
login
to post a comment