====== Transferring Memory to Other Tasks ====== ---- The previous section explained how to use ''%%ControlMem()%%'' to grant and revoke write access to memory pages. You can also use ''%%ControlMem()%%'' to transfer ownership of memory pages to other tasks: ''%%Err ControlMem( void *p, int32 size, int32 cmd, Item task )%%''\\ If the value of the ''%%cmd%%'' argument is ''%%MEMC_GIVE%%'', the call gives the memory pages to the task specified by the task argument. In this case, the ''%%p%%'' argument, a pointer to a memory location, and the ''%%size%%'' argument, the amount of the contiguous memory, in bytes, beginning at the memory location specified by the ''%%p%%'' argument, together specify the memory to give away. If these two arguments specify any part of a page, the entire page is given away. You can also give memory pages back to the kernel-and thereby return them to the system-wide free memory pool-by calling ''%%ControlMem()%%'' as described here, but with 0 as the value of the task argument. Memory pages can be returned to the kernel automatically when a task calls the ''%%ScavengeMem()%%'' function described in [[:documentation:development:opera:pf25:ppgfldr:pgsfldr:spg:05spg004#xref33449|Reclaiming Memory for Other Tasks]].