У меня есть встроенная функция, критическая для производительности. Он генерирует некоторые данные на основе параметра. Я хочу, чтобы компилятор оптимизировал генерацию данных для всех вызовов, когда параметр известен во время компиляции. Проблема в том, что я не могу заставить компилятор поместить оптимизированные данные из стека в статическую константу, поскольку маркировка данных статическими
нарушит случай, когда параметр не является константой времени компиляции. Постоянные данные в стеке ухудшают производительность. Есть ли способ вывести (возможно, используя templates / boost :: enable_if), что параметр является константой времени компиляции, и выбрать соответствующую реализацию генерации данных?
УТОЧНЕНИЕ
В основном у меня есть что-то вроде следующего:
struct Data {
int d_[16];
};
inline Data fun(int param)
{ //param can sometimes be a compile-time constant
... //generate the data
Data res = {gen0, gen2, gen3, ..., gen15}; //put the data into result
return res;
}
Итак, когда param
не является константой времени компиляции, мы просто генерируем все данные и возвращаем.
что параметр является константой времени компиляции и выбрать подходящую реализацию генерации данных?
УТОЧНЕНИЕ
В основном у меня есть что-то вроде следующего:
struct Data {
int d_[16];
};
inline Data fun(int param)
{ //param can sometimes be a compile-time constant
... //generate the data
Data res = {gen0, gen2, gen3, ..., gen15}; //put the data into result
return res;
}
Итак, когда param
не является константой времени компиляции, мы просто генерируем все данные и возвращаем.
что параметр является константой времени компиляции и выбрать подходящую реализацию генерации данных?
УТОЧНЕНИЕ
В основном у меня есть что-то вроде следующего:
struct Data {
int d_[16];
};
inline Data fun(int param)
{ //param can sometimes be a compile-time constant
... //generate the data
Data res = {gen0, gen2, gen3, ..., gen15}; //put the data into result
return res;
}
Итак, когда param
не является константой времени компиляции, мы просто генерируем все данные и возвращаем.
Когда известен параметр
, компилятор может оптимизировать генерацию данных. Но затем он не может оптимизировать следующую строку и генерирует большой объем кода, который просто устанавливает члены res
на известные данные (данные встроены в программный код). Я хочу, чтобы компилятор создал статическую константу, а затем скопировал ее в возвращаемый объект (это быстрее, чем выполнение большого количества кода со встроенными данными). Поскольку это встроенная функция, даже копия может быть необязательной.
Заявление об ограничении ответственности
Этот вопрос отличается от Как использовать другую перегрузку встроенной функции, в зависимости от параметра времени компиляции? . Это более общая проблема.