malloc(capacity)
on push: if cur >= capacity:
capacity *= 2; realloc
potentially:
malloc(<initial capacity chosen by profiling, likely at least 9>)
push:
if pos >= capacity:
capacity += initial
last = last->next = malloc(initial)
last[pos%len] = val
pos += 1
pop/peek:
val = last[pos%len]
if pop:
cur -= 1
if pos < capacity - len:
last = last->prev
free(last->next);
last->next = NULL;
return val
currently:
potentially: