Я знаю 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
в першу чергу, використовуючи.
Чи є краще рішення?