// locate an exiting record that contains specified address, or // the record, where the record with specified address, should // be inserted virtual MemPointer* locate(address addr) { VMMemRegion* cur = (VMMemRegion*)current(); VMMemRegion* next_p; while (cur != NULL) { if (cur->base() > addr) { return cur; } else { // find nearest existing range that has base address <= addr next_p = (VMMemRegion*)peek_next(); if (next_p != NULL && next_p->base() <= addr) { cur = (VMMemRegion*)next(); continue; } } if (cur->is_reserve_record() && cur->base() <= addr && (cur->base() + cur->size() > addr)) { return cur; } else if (cur->is_commit_record() && cur->base() <= addr && (cur->base() + cur->committed_size() > addr)) { return cur; } cur = (VMMemRegion*)next(); } return NULL; }