मुझे पता 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
है।
क्या कोई बेहतर उपाय है?