This is merely a place to record schemes which have been used to return arrays from subroutines.

When the array size in known to the caller, space can be allocated at compile time, or by code at the call site to reserve space for the array, and then the address of that space is passed to the routine. This space can be on the stack or the heap, or even allocated at load time.

When the array size is not known until the routine has begun, several issues arise. The caller presumably needs to learn the array size that is returned. Most computer languages provide a syntax for expressing the size of an array and this is accompanied with a dope vector, access to which reveals the array size and location. In Algol 68 the dope vector includes upper and lower bounds on each of the several dimensions of the array, as well as the virtual origin of the array. PL/I was almost the same. In such a system space for the dope vector can be allocated by the caller and its address passed to the routine. Space for the array proper can be allocated with a malloc like service by the routine with the obligation to free left to the caller.

Keykos allowed several patterns for calls between domains, each with their own address spaces. The routine (another domain) might require authority to allocate space for the array in the form of a space bank. The routine would create a segment, make that segment part of its own address space at an address chosen by the routine, populate it with data, and return the segment capability to the caller.


Locate mode IO in PL/I

The