Есть ли функция (SSEx intrinsics в порядке), которая заполнит память указанным значением int32_t? Например, когда это значение равно 0xAABBCC00, память результатов должна выглядеть так:
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
...
Я мог бы использовать std::fill или простой for-loop, но он недостаточно быстр.
Изменение размера вектора, выполненного только один раз в начале программы, это не проблема. Узкое место заполняет память.
Упрощенный код:
struct X
{
  typedef std::vector<int32_t> int_vec_t;
  int_vec_t buffer;
  X() : buffer( 5000000 ) { /* some more action */ }
  ~X() { /* some code here */ }
  // the following function is called 25 times per second
  const int_vec_t& process( int32_t background, const SOME_DATA& data );
};
const X::int_vec_t& X::process( int32_t background, const SOME_DATA& data )
{
    // the following one string takes 30% of total time of #process function
    std::fill( buffer.begin(), buffer.end(), background );
    // some processing
    // ...
    return buffer;
}
