> On Apr 25, 2018, at 12:59 PM, Sven Barth via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> The memory model of classes in Object Pascal is heap based. Changing that is 
> asking for trouble and I for one don't even want to fiddle around with that, 
> because I don't see any real benefit in it (and yes I daily work with C++) 
> that couldn't also be solved with a working ARC system. 
> 

Just for fun here’s that same code from the previous post but with the keyword 
added. :) It’s really a good example because this is the same thing we do over 
and over again every day so it’s a perfect candidate for a simple compiler 
optimization. We save a block of code, not forgetting to call free and 2 
pointers from GemMem that wasted CPU and got us closer to a fragmented heap.

It’s minor but it’s saves minor amounts of time and CPU cycles, both of which 
really add up over the lifetime of a program.

The programer in this case knows with 100% certainty they don’t need 2 pointers 
from GetMem but Pascal forces us anyways, and then makes us clean up the mess 
we didn’t need to make in the first place.

PS. I’m aware those 2 functions may actually raise exceptions but pretend they 
didn’t and this was just common memory management we do every day.

new code:

function TBlowFishCripto.Encrypt(const Value: string): string;
var
  en: TBlowFishEncryptStream; stackalias;
  stream: TStringStream; stackalias;
begin
  if length(Value) = 0 then
  begin
    Result := '';
    Exit;
  end;
  stream := TStringStream.Create('');
  en := TBlowFishEncryptStream.Create(FKey, stream);
  en.Write(Value[1], Length(Value));
  Result := stream.DataString;
end;  

original code:

function TBlowFishCripto.Encrypt(const Value: string): string;
var
  en: TBlowFishEncryptStream;
  stream: TStringStream;
begin
  if length(Value) = 0 then
  begin
    Result := '';
    Exit;
  end;
  try
    stream := TStringStream.Create('');
    en := TBlowFishEncryptStream.Create(FKey, stream);
    en.Write(Value[1], Length(Value));
    Result := stream.DataString;
  finally
    FreeAndNil(en);
    FreeAndNil(stream);
  end;
end;  

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to