On Wed, 2008-08-27 at 00:03 +0200, Henrik Nordstrom wrote:
> I'll give my view of "strings" and buffers: ... Thanks for writing this up, Henrik! Lots of valuable bits there, especially on the relationship among the classes and on class responsibilities. The class names feel familiar. Have you posted some related code long time ago? Was it during Squid3 birth? > As you already noted MemoryRegion is sufficiently small to be passed > around by value just like if it was a plain pointer. ... but it should be passed by reference whenever possible to avoid the hidden overheads of refcounting. Every time we pass or return a String by value, we create and later destroy at least one copy of a String, which implies "locking" and "unlocking" the underlying buffer. The refcouting operation is not necessarily very expensive on its own, but there are many contexts where it will force extra memory allocations and, eventually, thread contention. Those contexts are often difficult to identify by looking at the code. It is not difficult to add a "&" to the parameter or a local variable declaration and it is good practice to do so for Strings. HTH, Alex.
