Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does __inline__ mean ?

Tags:

c

inline

I am trying to learn C. Reading through some code, I came across a line like this:

__inline__ void () ... 

What does the __inline__ mean?. How does putting that word in front of a function make it different?

like image 801
ggg Avatar asked Jan 17 '10 20:01

ggg


People also ask

What is the function of the __ inline?

The __inline keyword causes a function to be inlined only if you specify the optimize option. If optimize is specified, whether or not __inline is honored depends on the setting of the inline optimizer option. By default, the inline option is in effect whenever the optimizer is run.

What does inline code mean?

Inline code refers to any lines of code that are added in the body of a program. It can be any type of code written in any programming language. The inline code executes independently and is usually executed under some condition by the primary program.

What does inline mean in C++?

The inline keyword tells the compiler to substitute the code within the function definition for every instance of a function call. Using inline functions can make your program faster because they eliminate the overhead associated with function calls.

How do you use inline?

Using inline functions saves time to transfer the control of the program from the calling function to the definition of the called function. When a function with a return statement is not returning any value and marked as inline, the compiler does not respond to the programmer's request of making it an inline function.


2 Answers

__inline__ is a non-standard extension. Typically, it tells the compiler: "inline this function", but being a non-standard extension we can't say with certainty unless we know which compiler this is on.

To inline is to remove the function call and place it's contents directly where the call would be made. This often removes the overhead of calling a function. It is not always optimal, because of code bloat (code getting too big and not fitting into cache), so most compilers will ignore all inline directives and do what they feel is best. This is a good thing. We humans are very poor at that kind of stuff, and it's usually considered bad practice to tell the compiler how to do its job.

Inlining is an important optimization, especially with the presence of helper functions. Imagine a function that returned the smaller of two ints:

int min(int x, int y) {     return (x < y) ? x : y; } 

If I used this function in my code, it would be an enormous waste of time to actually make a function call, here. If I had:

int a = /* some calculation */; int b = /* some other calculation */;  int minCalc = min(a, b); 

And the compiler inlined that function, the code would become:

int a = /* some calculation */; int b = /* some other calculation */;  int minCalc = (a < b) ? a : b; 

Which removes the overhead of calling a function. From here, even more optimizations can be made as the compiler gets to work directly with the code that would have normally been hidden behind a function call. As you can see, if I have a big function and I force the compiler to inline it everywhere, the code size could grow very large very fast, and would actually hinder execution speed.

There is a standard inline keyword which was used to indicate to the compiler a function should be inlined, but nowadays most compilers don't even acknowledge it as a hint to inline the function.

There is an important side-effect of inline, though, and this can be useful. If a function is marked as inline, multiple definitions of the same function across multiple translation units is not an error. Instead, a single function definition is selected and the others are thrown out, and assumed to be the same (it's up to you to make sure this is actually okay!). This allows you to define a function within a header file without risking ODR violation errors.

like image 174
GManNickG Avatar answered Sep 27 '22 23:09

GManNickG


Inline is a suggestion to the compiler to inline the function - instead of generating a block of code for the function and call instructions wherever it's used, it effectively cut-and-pastes the generated code wherever that function is called.

It's typically only a suggestion - while it can increase performance if it's called in a tight loop, it typically increases memory usage which can have generally negative performance effects. The compiler will make up its own mind whether to inline a function or not - it might take "the programmer suggests inlining this" into account, but (on most compilers), simply declaring a function as inline doesn't guarantee it will be.

like image 32
Anon. Avatar answered Sep 27 '22 23:09

Anon.