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