24.05.2014 Views

AIX Version 4.3 Differences Guide

AIX Version 4.3 Differences Guide

AIX Version 4.3 Differences Guide

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

• Executable data and BSS<br />

Following the text segments are working segments containing the<br />

executable's initialized data and BSS (uninitialized data) areas. The data area<br />

is vm_map()ed from the executable and relocated.<br />

• Heap<br />

The break value for the process is initialized just above the BSS area. As the<br />

heap is grown (with brk() and sbrk() calls), new segments are allocated above<br />

the current segment containing the current break value up to the segment<br />

containing the new break value. The heap is not allowed to grow into segment<br />

number 0x70000000 or beyond any shmat or mmap segment.<br />

• shmat and mmap segments<br />

Starting at segment number 0x70000000, shmat and mmap segments are<br />

allocated if no address is specified. Segments are allocated in increasing<br />

order in the first available segment at, or after, segment number 0x70000000.<br />

The shmat and mmap segments are placed where requested if the segment<br />

number is available and less than segment number 0x80000000.<br />

• Explicitly-loaded modules<br />

Explicitly-loaded modules (using the load() system call) were previously<br />

loaded into the heap of the process. This creates complexity in dealing with<br />

heap expansion/contraction and explicit loads.<br />

Explicitly-loaded objects are now loaded into separate segments starting at<br />

segment number 0x80000000. Segment numbers are allocated in increasing<br />

order in the first available segment number at, or after, segment number<br />

0x80000000.<br />

Explicitly-loaded objects are limited to segment numbers 0x80000000 to<br />

0x8FFFFFFF. To reduce segment table faults, multiple loaded modules are<br />

vm_map()ed into these working storage segments. The data for the loaded<br />

modules is loaded into these segments (and relocated) also.<br />

• Shared library text and data segments<br />

Starting at segment number 0x90000000, shared library text and data<br />

segments are allocated. These segment numbers are allocated globally (at<br />

the same address in all 64-bit address spaces) to allow sharing of the<br />

segments (in the case of text segments) and vm_map()ing of the segments (in<br />

the case of data segments). Global shared library text and data segments are<br />

maintained by the loader using the current method. Shared library text and<br />

data segments are limited to segment numbers 0x90000000 to 0x9FFFFFFF.<br />

• User stack<br />

The initial user stack is allocated starting at the top of segment number<br />

0xFFFFFFFF and will consume additional segment numbers below this as the<br />

stack grows. New segment numbers will be allocated at stack growth time.<br />

Only the segment number below the segment number containing the current<br />

top of stack is allocated. References to more than one segment number away<br />

from the current top of the stack are treated as wild references.<br />

Note: This restricts local variable allocation to less than 256 megabytes of the<br />

total allocation in each function. The stack growth is limited to segment<br />

numbers ranging from 0xF0000000 to 0xFFFFFFFF as segment numbers in<br />

the range 0xA0000000 to 0xEFFFFFFF are reserved for future system use.<br />

36 <strong>AIX</strong> <strong>Version</strong> <strong>4.3</strong> <strong>Differences</strong> <strong>Guide</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!