std::array
Yığında tamamen tahsis edildiğini biliyorum , ancak bu soru iki şey gerektiren güvenlik endişeleri tarafından teşvik ediliyor:
- İçindeki veriler
std::array
sıfır veya imha üzerine rastgele olacak - İçindeki veriler kilitlenecek , böylece kilitlenme veya takas belleğinde asla diske
std::array
gitmeyecek
Genellikle ile std::vector
, çözüm yaratmaktır özel allocator bunları yapar . Ancak, std::array
bunun nasıl yapılacağını ve dolayısıyla bu soruyu göremiyorum.
Yapabileceğim en iyi şey şudur:
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);
}
}
Ancak bu açıkça bellek kilitlenmesinden yoksundur ve ilk etapta std::array
kullanılmasıyla elde edilecek performans şemasını zorlaştırır std::array
.
Daha iyi bir çözüm var mı?