Я знаю, std::array
что полностью распределен в стеке, но этот вопрос мотивирован проблемами безопасности, которые требуют двух вещей:
- Данные в
std::array
нуле или будут рандомизированы при уничтожении - Данные в
std::array
будут заблокированы , так что они никогда не попадут на диск ни в случае сбоя, ни в разделе подкачки
Обычно std::vector
решение заключается в создании собственного распределителя, который делает эти вещи . Тем не менее, std::array
я не вижу, как это сделать, и, следовательно, этот вопрос.
Лучшее, что я мог сделать, это:
template <typename T, std::size_t Size>
struct SecureArray : public std::array<T, Size>
{
static_assert(std::is_pod<T>::value, "Only POD types allowed")
static_assert(sizeof(T) == 1, "Only 1-byte types allowed")
virtual ~SecureArray()
{
std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes
std::memcpy(this->data(), d.data(), Size);
}
}
Но это, очевидно, не std::array
требует блокировки памяти и усложняет схему производительности, которую нужно получить, используя std::array
в первую очередь.
Есть ли лучшее решение?