Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
460 views
in Technique[技术] by (71.8m points)

c - Performance benefits of strict aliasing

In C, what exactly are the performance benefits that come with observing strict aliasing?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There is a page that describes aliasing very thoroughly here.

There are also some SO topics here and here.

To summarize, the compiler cannot assume the value of data when two pointers of different types are accessing the same location (i.e. it must read the value every time and therefore cannot make optimizations).

This only occurs when strict aliasing is not being enforced. Strict aliasing options:

  • gcc: -fstrict-aliasing [default] and -fno-strict-aliasing
  • msvc: Strict aliasing is off by default. (If somebody knows how to turn it on, please say so.)

Example

Copy-paste this code into main.c:

void f(unsigned u)
{
    unsigned short* const bad = (unsigned short*)&u;
} 

int main(void)
{
    f(5);

    return 0;
}

Then compile the code with these options:

gcc main.c -Wall -O2

And you will get:

main.c:3: warning: dereferencing type-punned pointer will break strict-aliasing rules

Disable aliasing with:

gcc main.c -fno-strict-aliasing -Wall -O2

And the warning goes away. (Or just take out -Wall but...don't compile without it)

Try as I might I could not get MSVC to give me a warning.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...