MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _ascending_search

Function _ascending_search

components/mm/mm_aspace.c:1137–1172  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1135}
1136
1137static void *_ascending_search(rt_varea_t varea, rt_size_t req_size,
1138 rt_ubase_t align_mask, struct _mm_range limit)
1139{
1140 void *ret = RT_NULL;
1141 while (varea && varea->start < limit.end)
1142 {
1143 char *candidate = (char *)varea->start + varea->size;
1144 candidate = _align(candidate, align_mask);
1145
1146 if (candidate > (char *)limit.end || (char *)limit.end - candidate + 1 < req_size)
1147 break;
1148
1149 rt_varea_t nx_va = ASPACE_VAREA_NEXT(varea);
1150 if (nx_va)
1151 {
1152 if (candidate < (char *)nx_va->start)
1153 {
1154 rt_size_t gap_size =
1155 (char *)_lower(limit.end, (char *)nx_va->start - 1) -
1156 candidate + 1;
1157
1158 if (gap_size >= req_size)
1159 {
1160 ret = candidate;
1161 break;
1162 }
1163 }
1164 }
1165 else
1166 {
1167 ret = candidate;
1168 }
1169 varea = nx_va;
1170 }
1171 return ret;
1172}
1173
1174/** find suitable place in [limit_start, limit_end] */
1175static void *_find_head_and_asc_search(rt_aspace_t aspace, rt_size_t req_size,

Callers 2

_find_freeFunction · 0.85

Calls 2

_alignFunction · 0.85
_lowerFunction · 0.85

Tested by

no test coverage detected