У меня есть хеш-функция, определенная в заголовочном файле, и я хочу убедиться, что она встроена, но она использует очень большой константный статический буфер целых чисел.Мне интересно, повлияет ли этот буфер на способность функции быть встроенной.Вот код (он основан на реализации crc32, найденной здесь ).
inline HashId hash(const void *value, const size_t length,
const HashId previous = 0)
{
// Here is the really large const static buffer.
static const unsigned int crcTable[256] = { /* 256 Unique ints */ };
// Short hash calculation
unsigned char *cast = (unsigned char*) value;
unsigned int crc32 = previous ^ 0xFFFFFFFF;
for (size_t i = 0; i < length; ++i)
{
crc32 = (crc32 >> 8) ^ crcTable[ (crc32 ^ cast[i]) & 0xFF];
}
return (crc32 ^ 0xFFFFFFFF);
}
Я надеюсь, что если ввод известен во время компиляции, то этот вызов получитскомпилировано в одно значение.Это ожидает слишком много от компилятора?Я компилирую с gcc 4.6 с -O2, но мне также интересно услышать, как другие компиляторы могли бы относиться к этому.