Stories
Slash Boxes
Comments

SoylentNews is people

posted by Fnord666 on Sunday August 25 2019, @01:57PM   Printer-friendly
from the quite-the-contrary dept.

Submitted via IRC for SoyCow3196

Why const Doesn't Make C Code Faster

In a post a few months back I said it's a popular myth that const is helpful for enabling compiler optimisations in C and C++. I figured I should explain that one, especially because I used to believe it was obviously true, myself. I'll start off with some theory and artificial examples, then I'll do some experiments and benchmarks on a real codebase: Sqlite.

Let's start with what I used to think was the simplest and most obvious example of how const can make C code faster. First, let's say we have these two function declarations:

void func(int *x);
void constFunc(const int *x);

And suppose we have these two versions of some code:

void byArg(int *x)
{
  printf("%d\n", *x);
  func(x);
  printf("%d\n", *x);
}

void constByArg(const int *x)
{
  printf("%d\n", *x);
  constFunc(x);
  printf("%d\n", *x);
}

To do the printf(), the CPU has to fetch the value of *x from RAM through the pointer. Obviously, constByArg() can be made slightly faster because the compiler knows that *x is constant, so there's no need to load its value a second time after constFunc() does its thing. It's just printing the same thing. Right? Let's see the assembly code generated by GCC with optimisations cranked up:


Original Submission

 
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) by maxwell demon on Sunday August 25 2019, @09:07PM (3 children)

    by maxwell demon (1608) on Sunday August 25 2019, @09:07PM (#885376) Journal

    For code there is <ecode>:

    Tags are <not> a problem </> if you use the right<tm/> tool for the job.

    Note: I did <em>not</em> encode the tags here (well, except in the line above the <ecode> block).

    --
    The Tao of math: The numbers you can count are not the real numbers.
    Starting Score:    1  point
    Karma-Bonus Modifier   +1  

    Total Score:   2  
  • (Score: 0) by Anonymous Coward on Monday August 26 2019, @08:04AM (2 children)

    by Anonymous Coward on Monday August 26 2019, @08:04AM (#885565)

    Good to know <;->

    • (Score: 0) by Anonymous Coward on Monday August 26 2019, @10:53AM (1 child)

      by Anonymous Coward on Monday August 26 2019, @10:53AM (#885590)

      C:/>

      • (Score: 0) by Anonymous Coward on Monday August 26 2019, @09:32PM

        by Anonymous Coward on Monday August 26 2019, @09:32PM (#885817)

        You unix kids and those wrong-way slashes.