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,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