示例#1
0
文件: memory.c 项目: JohnXinhua/UVa
void freeMemory(Memory *mem, int start, int len) {
	if (len == 0)
		return ;
	Node *p = mem->head->next, *q = mem->head;
	for (; p != NULL; q = p, p = p->next) {
		if (p->l > start+len-1) {
			Node *t = newNode(start, start+len-1);
			t->next = p, q->next = t;
			mergeMemory(mem);
			return ;
		}
	}
	q->next = newNode(start, start+len-1);
	mergeMemory(mem);
}
示例#2
0
void		*findMemory(void *start, void *end, size_t size)
{
  void		*ptr;
  void		*memPosition;
  void		*last;
  size_t	memory;

  memPosition = 0;
  last = 0;
  memory = 0;
  ptr = ((t_metadata *)start)->_nextFree;
  while (ptr < end && memory < size + (2 * sizeof(t_metadata)))
    mergeMemory(&memPosition, &memory, &ptr, &last);
  if (last != memPosition)
    {
      ((t_metadata *)memPosition)->_nextFree = ((t_metadata *)last)->_nextFree;
      ((t_metadata *)memPosition)->_nextElem = ((t_metadata *)last)->_nextElem;
    }
  ((t_metadata *)memPosition)->_allocSize = memory;
  return (memPosition);
}