I know that under Windows, there are API functions like global\_alloc() and such, which allocate memory, and return a handle, then this handle can be locked and a pointer returned, then unlocked again. When unlocked, the system can move this piece of memory around when it runs low on space, optimising memory usage.

My question is that is there something similar under Linux, and if not, how does Linux optimize its memory usage?