Newbie Question - memory overlays
    Fredrik Olsson 
    peylow at gmail.com
       
    Tue Oct 24 00:56:34 PDT 2006
    
    
  
Jacques Collin skrev:
> My apologies if this has been answered before -- in which case,
> kindly point me to the source.
> 
> Delphi (Borland) allows one to overlay memory variables
> 
> " To create a new variable that resides at the same address as an
> existing variable, use the name of the existing variable (instead
> of an address) after the word absolute. For example,
> 
>   var
>      Str: string[32];
>      StrLen: Byte absolute Str;
> 
> specifies that the variable StrLen should start at the same
> address as Str. "
> 
> Question: Does D implement somrthing similar?
> This yould be useful if I could refer to a slice of a vector by a
> different name.
> 
> --- thanks --
It seems you could fake the same functionality with something like this:
char[32] Str;
(inout char StrLen) {
   // ... the rest of your function
} (Str[0]);
Some problems here though, if I try to use "inout byte StrLen" I get 
"cast(byte)((Str)[0]) is not an lvalue". And is the inout argument 
guaranteed to be "volatile" or will the compiler optimize read writes?
But as the dynamic arrays in D are way better then old school pascal 
strings I see no need. As a matter of fact strings and dynamic arrays 
have worked in Object Pascal (Delphi) in pretty much the same way as D 
does it since v1.0 of Delphi.
Overall I think the idea is dangerous, it will work poorly endian-wise 
for anything except byte size types.
// Fredrik Olsson
    
    
More information about the Digitalmars-d
mailing list