[Lazarus] Questions about SetLength
payl at wp.pl
Fri Sep 12 19:21:45 CEST 2014
> Maybe it is not a correct list, but I am going to ask my question anyway
> Is there a penalty for calling SetLength if array already has the length
> we need?
Yes, there's always penalty for operations that you don't need. FPC will
generate normal call, pass arguments, etc. I checked if SetLength with
ansistring detects that requested size is same: It doesn't, it performs
whole allocation and moving.
> And if there is a penalty - is there a way to write "generic" function
> SmartSetLength(array,length) that will only call SetLength if necessary?
No. Compiler internally emits information about element size, how are they
refcounted etc. as a pointer. Your best bet would be "hacking" FPC to emit
such information to your procedure and then pass it to internal fpc
I would personally like it a lot if there was way to access "secret"
information stored along with dynamic arrays/ansistrings, however it's not
easy task. I think best bet would be storing secret information pointers
along with refcount/length and then making functions that allow editing
those data. Then we could have generic "dynamic array" type (I assume?).
More information about the Lazarus