[Previous]
[Contents]
[Next]

_bheapseg()

allocate a based-heap segment

Synopsis:

#include <malloc.h>
__segment _bheapseg( size_t size );

Description:

The _bheapseg() function allocates a based-heap segment of at least size bytes.

The argument size indicates the initial size for the heap. The heap is automatically enlarged as needed if there isn't enough space available within it to satisfy an allocation request by _bcalloc(), _bexpand(), _bmalloc(), or _brealloc().

The value returned by _bheapseg() is the segment value or selector for the based heap. This value must be saved and used as an argument to other based-heap functions to indicate on which based heap to operate.

Each call to _bheapseg() allocates a new based heap.

Returns:

the segment value or selector for the based heap. This value must be saved and used as an argument to other based-heap functions to indicate on which based heap to operate.

A special value of _NULLSEG is returned if the segment couldn't be allocated.

Examples:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct list {
    struct list __based(__self) *next;
    int    value;
};

void main()
  {
    int     i;
    __segment    seg;
    struct list __based(seg) *head;
    struct list __based(seg) *p;

    /* allocate based heap */
    seg = _bheapseg( 1024 );
    if( seg == _NULLSEG ) {
      printf( "Unable to allocate based heap\n" );
      exit( 1 );
    }

    /* create a linked list in the based heap */
    head = 0;
    for( i = 1; i < 10; i++ ) {
      p = _bmalloc( seg, sizeof( struct list ) );
      if( p == _NULLOFF ) {
        printf( "_bmalloc failed\n" );
        break;
      }
      p->next = head;
      p->value = i;
      head = p;
    }

    /* traverse the linked list, printing out values */
    for( p = head; p != 0; p = p->next ) {
      printf( "Value = %d\n", p->value );
    }

    /* free all the elements of the linked list */
    for( ; p = head; ) {
      head = p->next;
      _bfree( seg, p );
    }
    /* free the based heap */
    _bfreeseg( seg );
  }

Classification:

WATCOM

Safety:
Interrupt handler Unknown
Signal handler Unknown
Thread Unknown

See also:

_bfreeseg(), _bcalloc(), _bexpand(), _bmalloc(), _brealloc()


[Previous]
[Contents]
[Next]