1 <h2>vm_allocate
</h2>
<hr>
<p>
<strong>Function
</strong> - Allocate a region of virtual memory.
<h3>SYNOPSIS
</h3>
<pre>
<strong>kern_return_t vm_allocate
</strong>
<strong>(vm_task_t
</strong> <var>target_task
</var>,
<strong>vm_address_t
</strong> <var>address
</var>,
<strong>vm_size_t
</strong> <var>size
</var>,
<strong>boolean_t
</strong> <var>anywhere
</var><strong>);
</strong>
</pre>
<h3>PARAMETERS
</h3>
<dl>
<p>
<dt> <var>target_task
</var>
<dd>
[in task send right]
The port for the task in whose address space the
region is to be allocated.
<p>
<dt> <var>address
</var>
<dd>
[pointer to in/out scalar]
The starting address for the region. If the
region as specified by the given starting address and size would not lie
within the task's un-allocated memory, the kernel does not allocate the
region. If allocated, the kernel returns the starting address actually used
for the allocated region.
<p>
<dt> <var>size
</var>
<dd>
[in scalar]
The number of bytes to allocate.
<p>
<dt> <var>anywhere
</var>
<dd>
[in scalar]
Placement indicator. The valid values are:
<dl>
<p>
<dt> <strong>TRUE
</strong>
<dd>
The kernel allocates the region in the next unused space that
is sufficient within the address space. The kernel returns the
starting address actually used in
<var>address
</var>.
<p>
<dt> <strong>FALSE
</strong>
<dd>
The kernel allocates the region starting at
<var>address
</var> unless that
space is already allocated.
</dl>
</dl>
<h3>DESCRIPTION
</h3>
<p>
The
<strong>vm_allocate
</strong> function allocates a region of virtual
memory in the specified
task's address space. A new region is always zero filled.
<p>
If
<var>anywhere
</var> is
<strong>TRUE
</strong>, the returned
<var>address
</var> will be at
a page boundary; otherwise, the region starts at the beginning
of the virtual page
containing
<var>address
</var>.
<var>size
</var> is always rounded up to an integral number of pages.
Because of this rounding to virtual page boundaries, the amount of memory
allocated may be greater than
<var>size
</var>. Use
<strong>host_page_size
</strong> to find
the current virtual page size.
<p>
Initially, there are no access restrictions on any of the pages of the newly
allocated region. Child tasks inherit the new region as a copy.
<h3>NOTES
</h3>
<p>
To establish different protections or inheritance for the new region, use the
<strong>vm_protect
</strong> and
<strong>vm_inherit
</strong> functions.
<p>
A task's address space can contain both explicitly allocated memory and
automatically allocated memory. The
<strong>vm_allocate
</strong> function
explicitly allocates
memory. The kernel automatically allocates memory to hold out-of-line data
passed in a message (and received with
<strong>mach_msg
</strong>). The kernel allocates
memory for the passed data as an integral number of pages.
<p>
This interface is machine word length dependent because of the virtual address
parameter.
<h3>RETURN VALUES
</h3>
<dl>
<p>
<dt> <strong>KERN_INVALID_ADDRESS
</strong>
<dd>
The specified address is illegal or reserved.
<p>
<dt> <strong>KERN_NO_SPACE
</strong>
<dd>
There is not enough space in the task's address space to allocate the
new region.
</dl>
<h3>RELATED INFORMATION
</h3>
<p>
Functions:
<a href=
"vm_deallocate.html"><strong>vm_deallocate
</strong></a>,
<a href=
"vm_inherit.html"><strong>vm_inherit
</strong></a>,
<a href=
"vm_protect.html"><strong>vm_protect
</strong></a>,
<a href=
"vm_region.html"><strong>vm_region
</strong></a>,
<a href=
"host_page_size.html"><strong>host_page_size
</strong></a>.