Hi,

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 setlength. 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?).

--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to