It’s a good practice to divide the program into several functions such that parts of the program don’t get repeated a lot and to make the code easily understandable.
We all know that calling and returning from a function generates some overhead. The overhead is sometimes to such an extent that it makes significant effect on the overall speed of certain complex and function-oriented programs. In most cases, we have only a few functions that have extensive use and make significant impact on the performance of the whole program.
Not using functions is not an option, using function-like macros is an option, but there is a better solution, to use Inline Functions.
Yes, like it sounds, inline functions are expanded at the place of calling rather than being “really called” thus reducing the overhead. It means wherever we call an inline function, compiler will expand the code there and no actual calling will be done.
Member functions of classes are generally made inline as in many cases these functions are short but any other function can be inline too. Functions are made inline by preceding its definition with the keyword “inline” as shown in the example below:
// precede the definition
// of function with "inline"
// it's optional to do so for
// the prototype
inline ret-type func-name(arg-list...)
{
...
...
...
}
Member functions (class) can be made inline as below:
class myclass
{
private:
...
...
public:
ret-type func-name(arg-list...);
...
...
};
inline ret-type myclass::func-name(arg-list...)
{
...
...
}
Or simply as
class myclass
{
private:
...
...
public:
inline ret-type myclass::func-name(arg-list...)
{
...
...
}
...
...
};
Short member functions are usually made inline as above.
Please mote one thing though, inline is a request to the compiler and not a command which means it depends on the compiler and the conditions whether a particular function will be really made “inline” or not.
As inlining increases duplication of parts of code, performance will be gained at the expense of program size, which is pretty obvious. As I’ve said not all functions make major impact on the overall performance of the program. So we should carefully select which functions to inline and which not to, because if we inline many functions we can’t be sure of whether it’d do any better to the performance, but it’s for sure that program size will increase unnecessarily.
We all know that calling and returning from a function generates some overhead. The overhead is sometimes to such an extent that it makes significant effect on the overall speed of certain complex and function-oriented programs. In most cases, we have only a few functions that have extensive use and make significant impact on the performance of the whole program.
Not using functions is not an option, using function-like macros is an option, but there is a better solution, to use Inline Functions.
Yes, like it sounds, inline functions are expanded at the place of calling rather than being “really called” thus reducing the overhead. It means wherever we call an inline function, compiler will expand the code there and no actual calling will be done.
Member functions of classes are generally made inline as in many cases these functions are short but any other function can be inline too. Functions are made inline by preceding its definition with the keyword “inline” as shown in the example below:
// precede the definition
// of function with "inline"
// it's optional to do so for
// the prototype
inline ret-type func-name(arg-list...)
{
...
...
...
}
Member functions (class) can be made inline as below:
class myclass
{
private:
...
...
public:
ret-type func-name(arg-list...);
...
...
};
inline ret-type myclass::func-name(arg-list...)
{
...
...
}
Or simply as
class myclass
{
private:
...
...
public:
inline ret-type myclass::func-name(arg-list...)
{
...
...
}
...
...
};
Short member functions are usually made inline as above.
Please mote one thing though, inline is a request to the compiler and not a command which means it depends on the compiler and the conditions whether a particular function will be really made “inline” or not.
As inlining increases duplication of parts of code, performance will be gained at the expense of program size, which is pretty obvious. As I’ve said not all functions make major impact on the overall performance of the program. So we should carefully select which functions to inline and which not to, because if we inline many functions we can’t be sure of whether it’d do any better to the performance, but it’s for sure that program size will increase unnecessarily.
Comments