Subsentient writes:
"I've been writing C for quite some time, but I never followed good conventions I'm afraid, and I never payed much attention to the optimization tricks of the higher C programmers. Sure, I use const when I can, I use the pointer methods for manual string copying, I even use register for all the good that does with modern compilers, but now, I'm trying to write a C-string handling library for personal use, but I need speed, and I really don't want to use inline ASM. So, I am wondering, what would other Soylenters do to write efficient, pure, standards-compliant C?"
(Score: 3, Informative) by zip on Sunday March 16 2014, @04:04AM
I'm not sure if this still applies with newer versions, but maybe it's unrelated: https://stackoverflow.com/questions/16123446/java- 7-string-substring-complexity [stackoverflow.com]
But as far as I know, Qt strings still behave this way.
(Score: 2) by ls671 on Monday March 17 2014, @02:07AM
Before:
String a = "1234567890"; // a is now "12"
a = a.substring(0,2);
1) No memory copy has occured.
2) "1234567890" is still kept into memory with a reference count of 1
Now (apparently according to the link you posted):
String a = "1234567890"; // a is now "12"
a = a.substring(0,2);
1) Memory copy has occured.
2) "1234567890" is eligible for garbage collection while a new area of memory has been assigned to "12".
IMHO, there is work to be done to combine the 2 approaches. Hint: Keep old behavior but revert back to new behavior in the background after a given TTL where "1234567890" hasn't been accessed, then transparently copy the substring "12" to a new memory area.
I know it sounds very complicated but it is pretty simple compared to the many flavors of garbage collection floating around ;-)
Everything I write is lies, including this sentence.