Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP Pascal/HP-UX Programmer's Guide > Chapter 6 Dynamic Variables

P_getheap and P_rtnheap Procedures

» 

Technical documentation

Complete book in PDF
» Feedback
Content starts here

 » Table of Contents

 » Glossary

 » Index

The procedures p_getheap and p_rtnheap are intrinsics in the Pascal run-time library. Any program that runs on the operating system can call them, regardless of the language in which it is written. (For more information on intrinsics, Chapter 10 “Intrinsics ”).

The procedure p_getheap tries to allocate a region of heap space of a specified size and alignment. If it succeeds, it "points" its VAR pointer parameter at the first element of the region and assigns its VAR Boolean parameter the value true. If it fails, it assigns its VAR Boolean parameter the value false.

Syntax

p_getheap (VAR regptr     : localanyptr;
regsize : integer;
alignment : integer;
VAR ok : Boolean);

Parameters

regptr

If p_getheap can allocate the region of heap space, it "points" regptr at the first element of the region (that is, p_getheap assigns the address of the first element of the region to regptr).

regsize

The size of the region of heap space, in bytes.

alignment

Title not available (P_getheap and P_rtnheap Procedures )

Integer:

Specifies the region of heap space to be:

1

Byte-aligned

2

Halfword-aligned

4

Word-aligned

8

Double-word-aligned

16

16-byte aligned

32

32-byte aligned

64

64-byte aligned

2048

Page-aligned

ok

If p_getheap can allocate the region of heap space, it assigns ok the value true; if not, it assigns ok the value false.

The procedure p_rtnheap tries to deallocate a region of heap space that the p_getheap procedure allocated. If it succeeds, it assigns its VAR Boolean parameter the value true. If it fails, it assigns its VAR Boolean parameter the value false. P_rtnheap does not close files residing in the region allocated by p_getheap.

Syntax

p_rtnheap (VAR regptr    : localanyptr;
regsize : integer;
alignment : integer;
VAR ok : Boolean);

Parameters

regptr

A pointer whose current value was assigned to it by the procedure p_getheap.

regsize

The size in bytes of the region of heap space that p_getheap assigned to regptr.

alignment

The number that specified the alignment of the region of heap space that p_getheap assigned to regptr.

ok

If p_rtnheap can deallocate the region of heap space, it assigns ok the value true; if not, it assigns ok the value false.

Example 1

$STANDARD_LEVEL 'HP_MODCAL'$
PROGRAM prog;

TYPE
intpointer = ^integer;

VAR
b : Boolean;
i : integer;
ptr1,
ptr2 : intpointer;

PROCEDURE p_getheap (VAR regptr : intpointer;
regsize : integer;
alignment : integer;
VAR ok : Boolean); EXTERNAL;

PROCEDURE p_rtnheap (VAR regptr : intpointer;
regsize : integer;
alignment : integer;
VAR ok : Boolean); EXTERNAL;

BEGIN
p_getheap(ptr1,40,4,b); {allocate a 40-byte region}

ptr2 := ptr1; {save ptr1 for later call to p_rtnheap}

FOR i := 1 TO 10 DO BEGIN
ptr2^ := i;
ptr2 := addtopointer(ptr2,4);
END;

p_rtnheap(ptr1,40,4,b); {deallocate the 40-byte region}

p_getheap(ptr1,50,2,b);
p_rtnheap(ptr1,20,2,b); {illegal 20 must be 50}

p_getheap(ptr1,16,8,b);
p_rtnheap(ptr1,16,1,b); {illegal 1 must be 8}
END.

The procedures p_getheap and p_rtnheap are independent from the procedures mark, release, new, and dispose.

Example 2

$STANDARD_LEVEL 'HP_MODCAL'$
PROGRAM prog;
VAR
i : integer;
b : Boolean;
p1,p2,p3,
ptr1, ptr2, ptr3 : ^integer;

PROCEDURE p_getheap; INTRINSIC;
PROCEDURE p_rtnheap; INTRINSIC;

BEGIN
p_getheap(ptr1,28,4,b); {allocate a 28-byte region}

ptr3 := ptr1; {assign values in the 28-byte region}
FOR i := 1 TO 7 DO BEGIN
ptr3^ := i;
ptr3 := addtopointer(ptr3,4);
END;
ptr3 := ptr1;

mark(ptr2); {mark the heap}

new(p1); {allocate p1, p2, and p3}
new(p2);
new(p3);

p_rtnheap(ptr1,28,4,b); {deallocate the 28-byte region}

ptr3^ := 0; {illegal p_rtnheap deallocated ptr3^}

p1^ := 1; {p_rtnheap did not deallocate p1, p2, or p3;}
p2^ := 2; {they are still accessible}
p3^ := 3;

p_getheap(ptr1,4,4,b); {allocate a 4-byte region}
   release(ptr2);

ptr1^ := 0; {The 4-byte region was not
deallocated, and the values
in it are still accessible}

p1^ := p2^ + p3^; {illegal p1, p2, and p3 were deallocated}
END.
Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© Hewlett-Packard Development Company, L.P.