Home > Backend Development > C++ > body text

Why are Lambdas More Optimizable than Plain Functions in C ?

Susan Sarandon
Release: 2024-11-24 06:00:19
Original
610 people have browsed it

Why are Lambdas More Optimizable than Plain Functions in C  ?

Why Lambdas Allow for Enhanced Compiler Optimization Compared to Plain Functions

The C Standard Library (Second Edition) by Nicolai Josuttis asserts that lambdas can be optimized more effectively by compilers in comparison to plain functions. This advantage stems from the nature of lambdas as function objects.

When a lambda is passed to a function template, it is instantiated as a new function specifically tailored to that object. This allows the compiler to effortlessly inline the lambda call. Conversely, with plain functions, a function pointer is passed to the function template. Traditionally, compilers have faced difficulties inlining calls made through function pointers.

To illustrate this concept, consider the following function template:

template <typename Iter, typename F>
void map(Iter begin, Iter end, F f) {
    for (; begin != end; ++begin)
        *begin = f(*begin);
}
Copy after login

Invoking this function with a lambda:

int a[] = { 1, 2, 3, 4 };
map(begin(a), end(a), [](int n) { return n * 2; });
Copy after login

results in an instantiation created by the compiler:

template <>
void map<int*, _some_lambda_type>(int* begin, int* end, _some_lambda_type f) {
    for (; begin != end; ++begin)
        *begin = f.operator()(*begin);
}
Copy after login

In this case, the compiler has access to _some_lambda_type::operator() and can seamlessly inline calls to it. Each lambda has a distinct type, so using a different lambda with map() would produce a new instantiation.

However, if a function pointer were used instead:

map<int*, int (*)(int)>(int* begin, int* end, int (*f)(int)) {
    for (; begin != end; ++begin)
        *begin = f(*begin);
}
Copy after login

The compiler would be unable to inline calls to f until the encompassing call to map() is also inlined, allowing it to pinpoint a specific function. This highlights the advantage of lambdas over plain functions in terms of compiler optimization.

The above is the detailed content of Why are Lambdas More Optimizable than Plain Functions in C ?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template