Почему компилятор решает, когда внедрять функции? Почему я не могу заказать это для этого?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему компилятор решает, когда внедрять функции? Почему я не могу заказать это для этого?

Сообщение Anonymous »

Это общее утверждение, что компиляторы принимают окончательное решение об внедрении. Но что, если разработчик уверен, что в определенном месте функция встроенной определенно хороша? Например, представьте себе сортировщика, который имеет код, который является общим для любого типа данных, учитывая, что он имеет доступ к правильной сравнительному функции. Если слишком много данных, безусловно, удаление накладных расходов вызова функции для каждого сравнения сделает их быстрее, какой механизм может использоваться для явного, чтобы сказать компилятору сделать это? Тем не менее, для разработчика должна быть возможность принять решение. < /P>

Код: Выделить всё

template 
void bubble_sort_1(std::vector& arr)
{
bool swapped;
for (std::size_t i = 0; i < arr.size(); ++i) {
swapped = false;
for (std::size_t j = 0; j + 1 < arr.size() - i; ++j) {
if (compare(arr[j], arr[j + 1]) > 0) {
std::swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
};

template 
void bubble_sort_2(std::vector& arr, int (*compare)(T, T))
{
bool swapped;
for (std::size_t i = 0; i < arr.size(); ++i) {
swapped = false;
for (std::size_t j = 0; j + 1 < arr.size() - i; ++j) {
if (compare(arr[j], arr[j + 1]) > 0) {
std::swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
};
В этом коде Bubble_sort_1 и bubble_sort_2 оба будут использовать указатель функции для сравнения , в котором они будут вызовы. Верно? В Bubble_sort_2 нет взыскания, но для Bubble_sort_1 компилятор может (или не может быть, это до этого) оптимизировать вызов функции Compare , чтобы встроить ее, это правильно? Также он будет генерировать код для каждого разных указателя, который я использую, верно? < /P>
Я довольно запутался. Желаемое поведение не сложно, но я не получаю то, что я должен сделать, чтобы достичь его. Если поведение Bubble_sort_1 , как я ожидаю, лучшее, что я получил, - это «это дело компилятора», что не очень приятно для меня. За исключением размера кода, я обеспокоен скоростью кода. Я действительно не вижу, как удаление накладных расходов кода, которое будет выполнено в любом случае, могло бы ухудшить скорость.

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-to-do-so
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»