Naja, man holt sich zuerst einen oder mehrere 4 KB Blöcke.
Dann schreibt man dort eine Struktur rein, in der steht, wie viel Speicher von den 4KB belegt ist. Wenn malloc() das nächste mal aufgerufen wird, geht man zum Ende des belegten Speichers und schreibt dort wieder eine Sturktur rein, in der steht, wie viel belegt ist usw. Das ist nur ein Beispiel, wie man malloc() aufbauen könnte, man kann das natürlich auch anders und effizienter machen.