ฉันรู้ว่าstd::array
จัดสรรอย่างสมบูรณ์ในสแต็ก แต่คำถามนี้ได้รับแรงบันดาลใจจากความกังวลด้านความปลอดภัยที่ต้องการสองสิ่ง:
- ข้อมูลใน
std::array
จะถูก zerod หรือสุ่มเมื่อถูกทำลาย - ข้อมูลใน
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
ในตอนแรก
มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม?