Basic's SETMEM Doesn't Free C Far Allocation; _fmalloc, _ffree (42596)
The information in this article applies to:
- Microsoft QuickBASIC 2.0
- Microsoft QuickBASIC 4.0
- Microsoft QuickBASIC 4.0b
- Microsoft QuickBASIC 4.5
- Microsoft BASIC Compiler for MS-DOS and OS/2 6.0
- Microsoft BASIC Compiler for MS-DOS and OS/2 6.0b
- Microsoft Basic Professional Development System (PDS) for MS-DOS and MS OS/2 7.0
This article was previously published under Q42596 SUMMARY
When reducing far-heap size with the SETMEM statement in Basic and
then calling a Microsoft C or QuickC function that does a far
allocation, the reduced far-heap memory is not recoverable with SETMEM
after returning to the QuickBasic program. C routines do far-memory
allocation with "_fmalloc" and "_ffree" functions. This is expected
behavior for the following reasons:
- The C _fmalloc obtains memory from MS-DOS. Once far memory is
obtained by a C program, it becomes part of the C far heap.
- The _ffree does not release the memory back to MS-DOS, but rather
stores it in the C far heap along with a linked-list data structure
that C uses to manage its heap space.
Thus, SETMEM cannot recover this memory.
This information applies to Microsoft QuickBasic versions 4.00, 4.00b,
and 4.50 for MS-DOS; to Microsoft Basic Compiler versions 6.00 and
6.00b for MS-DOS and MS OS/2; and to Microsoft Basic PDS version 7.00
for MS-DOS and MS OS/2.
Modification Type: | Minor | Last Reviewed: | 1/8/2003 |
---|
Keywords: | KB42596 |
---|
|