}
void MC_ignore(void *address, size_t size){
+
MC_SET_RAW_MEM;
+
mc_ignore_region_t region = NULL;
region = xbt_new0(s_mc_ignore_region_t, 1);
region->address = address;
region->size = size;
- xbt_dynar_push(mmalloc_ignore, ®ion);
+
+ unsigned int cursor = 0;
+ mc_ignore_region_t current_region;
+ xbt_dynar_foreach(mmalloc_ignore, cursor, current_region){
+ if(current_region->address > address)
+ break;
+ }
+
+ xbt_dynar_insert_at(mmalloc_ignore, cursor, ®ion);
+
MC_UNSET_RAW_MEM;
}
static size_t heap_comparison_ignore(void *address){
unsigned int cursor = 0;
+ int start = 0;
+ int end = xbt_dynar_length(mmalloc_ignore) - 1;
mc_ignore_region_t region;
- xbt_dynar_foreach(mmalloc_ignore, cursor, region){
+
+ while(start <= end){
+ cursor = (start + end) / 2;
+ region = (mc_ignore_region_t)xbt_dynar_get_as(mmalloc_ignore, cursor, mc_ignore_region_t);
if(region->address == address)
return region->size;
+ if(region->address < address)
+ start = cursor + 1;
+ if(region->address > address)
+ end = cursor - 1;
}
+
return 0;
}