On Wed, 27 Aug 2003, Mark Emerson wrote:

> 1. If a segment is deleted from an ansistring, e.g. ...
>
> s := 'abcdefghijklmnop';
> delete (s, 5, 6);
>
> yielding s = 'abcdelmnop'
>
> ...does the system "shift" the 'lmnop' to the left, or does the string
> get hooked together with pointers, thus saving much time with long strings?

It is shifted. Hooked together would maybe make 'delete' faster, but
would considerably slow down other operations.

But the memory is not reallocated in this case, unless the string had a
reference count of 2.

And the shift is done using a 'Move' instruction, which is highly
optimized.

>
> 2. Is there any documentation yet of the ansistring internals?  If not,
> what file contains the source?

The memory layout is documented in the programmer's guide:

Memory Issues
 + Data Formats
   + String types
     + Ansistring types

The source is rtl/inc/astrings.inc

Michael.

_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to