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: 2, Insightful) by TGV on Sunday March 16 2014, @08:13AM

    by TGV (2838) on Sunday March 16 2014, @08:13AM (#17120)

    The key to efficient coding is not in using dirty tricks, but in efficient algorithms. C, however, does allow you to express certain algorithms more efficiently than other languages. I had a string problem once, and I ended up with an AVL tree of char* strings (this was before const). Every time the same string was created (and in text processing that happens very, very often), the same pointer to the string in that tree was returned. Elsewhere, string comparisons were done by comparing the pointer. Strings were identical if and only if the pointer was identical. For my particular problem, that saved a huge amount of time and memory.

    However, for generic string libraries, there is not one algorithm guaranteed to work optimally. So, my advice is to analyze what your library has to be good at, find proper algorithms to do that, and code them efficiently (and safely).

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

    Total Score:   2  
  • (Score: 1) by Platinumrat on Sunday March 16 2014, @09:09PM

    by Platinumrat (395) on Sunday March 16 2014, @09:09PM (#17278)
    I agree with the above, but add the following proviso...

    You need an architecture that supports your algorithms

    What I mean, is that people tend to micro optimise, but then go use CORBA, JSON, XML, HTLM, REST (name your web service) architecture for inter-process communication or data access, when it's not appropriate. Sometimes, mbufs, dmesg, SQL or TCP/UDP are perfectly appropriate means of passing data around.

    No compiler can help, if you include inappropriate frameworks.