On 17/02/14 06:02, Jürgen Hestermann wrote: > > Am 2014-02-16 17:16, schrieb Michael Van Canneyt: >> It does exactly that, it says: >> 1) No COW > > As said already: SetLength *is* a write! > >
I'm not of compiler background - but I think you're confusing things here. To 'write' usually means : changing DATA element(s). That's it. You have a sheet of paper of known size and you write on it/erase/change the text. But the size of the array remains the same. SetLength is /not/ a write in this sense : because you're resizing the paper you're going to write on (e.g. adding another page or cutting it to size) As far I understood, SetLength is changing the /description/ of the array (meta-data?) but not the data itself : in this sense, it is not a 'write data' operation. It does 'write' as in: change parameters - of the array DESCRIPTION area, but that area is not ARRAY DATA; and enlarging/shrinking the memory allocation - but that does not change the content of the already written-to array elements: it may add some blank ones or remove some written-to ones, but the rest remains UNCHANGED, i.e. they (the just-added or remaining-after-removal ones) are not being written-to by doing SetLength.) That being said, maybe a mention of what it means to the user of the compiler, could actually be beneficial to overall understanding... like " SetLength: * Enforces unique refcount (refcount := 1). * If refcount was more than 1 (i.e. 2 or more pointers to the array existed before calling SetLength) then it copies array data to new data area, trims or enlarges copied data accordingly and returns new pointer to the resized array. * otherwise (if refcount was 1) just trims/enlarges the array data area accordingly. " Hope this helps, -L. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal