Stories
Slash Boxes
Comments

SoylentNews is people

SoylentNews is powered by your submissions, so send in your scoop. Only 14 submissions in the queue.
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.