digitalmars.D - COW with scratch in std.string
- Ben Hinkle (37/37) Aug 30 2005 OK, here's another thread related to COW and std.string. Currently when ...
OK, here's another thread related to COW and std.string. Currently when a function in std.string needs to copy (the C in COW) it allocates the new string from the GC. How about adding an optional trailing parameter for a scratch char[] for the result if it fits in the scratch? Basically what typically happens is that instead of a line line "result = new char[len]" you instead initialize result to the scratch array and then say "result.length = len;". For example, currently std.string.join looks rougly like char[] join(char[][] words, char[] sep) { char[] result; if (words.length) { [ compute length of result in len ] result = new char[len]; [ fill result ] } return result; } and instead if join took an optional trailing scratch array it could be written as char[] join(char[][] words, char[] sep, char[] scratch = null) { char[] result; if (words.length) { [ compute length of result in len ] result = scratch; result.length = len; [ fill result ] } return result; } I haven't done any actual performance testing of such a modified std.string. The function tolower etc also can take a scratch array to reduce the GC load but those would still suffer from the performance hit of copying the strings to the scratch (or whereever the result ends up).
Aug 30 2005