However, allocation for mark and sweep is much more complicated than stop and copy, making it quite a bit slower overall. Thus, it can coexist well with C code, where one never dares to move an object because of possible address computations. In fact, some mark and sweep garbage collectors have been written for C and are gaining popularity. These collectors are extremely conservative, treating anything that might be a pointer as a pointer. Currently, stop and copy is the efficiency champ among the garbage collection schemes.
Allocation is very cheap, requiring only an increment of the heap pointer.
Collection is also relatively cheap, since only objects that are actually being used are ever touched. However, copying also requires that the programming language allow objects to be moved, which is only true if address manipulation operations are somewhat restricted.