Stories
Slash Boxes
Comments

SoylentNews is people

posted by LaminatorX on Sunday March 16 2014, @03:28AM   Printer-friendly
from the premature-optimization-is-the-root-of-all-evil dept.

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?"

 
This discussion has been archived. No new comments can be posted.
Display Options Threshold/Breakthrough Mark All as Read Mark All as Unread
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
  • (Score: 3, Informative) by zip on Sunday March 16 2014, @04:04AM

    by zip (702) on Sunday March 16 2014, @04:04AM (#17072)

    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.

    Starting Score:    1  point
    Moderation   +2  
       Informative=2, Total=2
    Extra 'Informative' Modifier   0  

    Total Score:   3  
  • (Score: 2) by ls671 on Monday March 17 2014, @02:07AM

    by ls671 (891) on Monday March 17 2014, @02:07AM (#17346) Homepage

    Before:

    String a = "1234567890";
    a = a.substring(0,2); // a is now "12"

    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 = a.substring(0,2); // a is now "12"

    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.