Q12337: Explanation of String Space Garbage Collection; FRE Function
Article: Q12337 Product(s): See article Version(s): 1.00 1.01 1.02 2.00 2.01 3.00 4.00 4.00b 4.50 Operating System(s): MS-DOS Keyword(s): ENDUSER | B_BasicCom | mspl13_basic Last Modified: 29-DEC-1989 This article discusses three topics regarding string space compression: 1. When QuickBASIC compresses string space during execution of a program 2. Whether disabling string space compression is possible 3. Whether string descriptors are fixed in memory or if they move This information applies to Microsoft QuickBASIC 4.00 4.00B and 4.50, to Microsoft BASIC Compiler 6.00 and 6.00B, and to Microsoft BASIC PDS Version 7.00 for MS-DOS and MS OS/2. 1. When a string variable is assigned a new value, the new string takes the next available memory in string space. The old string value is deallocated but takes up space until string space "garbage collection" occurs. A program compresses string space as part of "garbage collection" when deallocated strings fill up the 60,000 bytes of available data space and the program needs to reallocate a string variable or a temporary string variable. You can force string compression with the FRE function [PRINT FRE("")], but there is no other way to predict when it will occur. An OPEN or CLOSE of a file can also trigger garbage collection. 2. There is no way to disable the automatic garbage collection. At the time garbage collection occurs, your program is out of memory, so that if you were to disable it, your program could not continue to execute. You can schedule garbage collection to some extent by using the FRE function before executing code where you do not want garbage collection to occur, but if memory is tight, garbage collection may occur again anyway. 3. String descriptors are the first bytes of each string, and they move as the strings move.
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.