Commit 5e1c8f73ae98d35de8101477fe64e01403811e4f

Authored by Georg Hopp
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 736 {
737 737 struct memSegment * seg = NULL;
738 738 long psize = sysconf(_SC_PAGESIZE);
739   - size_t check;
740 739
741 740 size += sizeof(struct memSegment);
742 741
... ... @@ -746,12 +745,17 @@ TR_malloc(size_t size)
746 745 size = ((size / psize) + 1) * psize;
747 746 }
748 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