aboutsummaryrefslogtreecommitdiff
path: root/lib/libmalloc/TODO
blob: ae4430a7451638de2fc3e7cbe9b6397dca939af0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
alloca-like allocation with malloc -- mark()/release() paradigm.  specify a
point where one starts a stack (stk_create), and stk_alloc from that.
stk_free releases the specified stack.  This speeds up frees, doesn't speed
up mallocs too much?  Time it in trace situations.

Tests all in subdirectory.

sbrk stuff for Mach.

Scan all my email on malloc?

Make the document a manual page.  Terser, less cutesy.

mal_size() returns size of a malloc'ed block in bytes.

before starting a search in malloc(), if rover points to wilderness, and
wilderness->next is not null, rover = wilderness->next.  need to keep
wilderness uptodate.  should help rayan.

check alignment in IS_VALID_PTR.

Adaptive sbrk size. Keep increasing it by DEF_SBRKUNITS, then if sbrk fails,
half the sbrkunits till we're smaller than the request (in which case it's
all over). Should reduce the number of calls to sbrk without increasing
wastage too much.

Generalize grabhunk() to work properly if new arenas are lower than the old
ones - i.e. don't rely on sbrk() semantics at all.  I already did some of
this work in the port to the Firefly. [DONE -- Dec 15, 1993]

Check that totalavail works right for realloc. Should we scrap totalavail
and save a pointer to the max block, so that can both tell if we need to
sbrk without a search, as well as realize if the max block has shrunk.
Problem: how do we know if the max block shrank below the size of some other
block? Heuristic? Average block size?  Some adapting fraction of totalavail?
We sbrk if request is greater than (1+fraction)*totalavail/nfree is what
Korn and Vo suggest.  Assuming fraction is always 1/K, we get
(K+1)*totalavail/K/nfree.  We can double K everytime we fail a search. To
provide some negative feedback, we can change the 1 to M, and increment M
everytime we succeed in a search. Doesn't sound good. Need a better
heuristic.  Grump. Avoid this stuff for now.

Separate all system dependent stuff into a sysdep header where these things
can fight it out.

create stdlib.h and move std. decls there.  keep malloc.h as a value added
thing and declare new stuff there.  decide on malloc(0).
(malloc 0 should return 0 sized block by default, I think)

setopt Non-ansi should cause malloc(0), realloc(0, *) or realloc(*, 0)
to fail.

some way to report when the last free happened when you try to use a freed
pointer.  maintain a splay tree where you add ptrs when you free'em and
delete when you malloc them?

finish my trace driven simulation stuff in ../maltrace.

way to walk the heap.  if it is a macro, then the other two could use it too.
should probably switch to arena before all these changes.

interns.h from externs.h. Then we don't need aexterns.h.