Есть ли функция (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;
}