Memory allocation: Difference between revisions

No edit summary
Line 829:
Like Perl 5, Perl 6 is intended to run largely stackless, so all allocations are really on the heap, including activation records. Allocations are managed automatically. It is easy enough to allocate a memory buffer of a particular size however, if you really need it:
<lang perl6>my $buffer = Buf.new(0 xx 1024);</lang>
=={{header|Phix}}==
In normal use, memory management is fully automatic in Phix. However you may need to explicitly allocate memory when interfacing to C etc.
By default (for compatibility with legacy code) cleanup must be performed manually, but there is an optional flag on both the memory
allocation routines (allocate and allocate_string) to automate that for you, or you could even roll your own via delete_routine().
<lang Phix>atom addr = allocate(512) -- limit is 1,610,612,728 bytes on 32-bit systems
...
free(addr)
atom addr2 = allocate(512,1) -- automatically freed when addr2 drops out of scope
atom addr3 = allocate_string("a string",1) -- automatically freed when addr3 drops out of scope</lang>
Behind the scenes, the Phix stack is actually managed as a linked list of virtual stack blocks allocated on the heap, and as such it
would be utterly pointless and quite probably extremely tricky to mess with.
 
=={{header|PicoLisp}}==
Only the heap can be explicitly controlled in PicoLisp. Usually this is not necessary, as it happens automatically.
7,805

edits