Мне нужно написать службу Windows, которая обрабатывает некоторые конфиденциальные данные (например, PIN-коды, пароли и т.д.). Эти сведения необходимы в течение очень короткого промежутка времени: обычно они отправляются почти сразу в устройство для чтения смарт-карт.
Давайте рассмотрим этот фрагмент кода:
{
std::string password = getPassword(); // Get the password from the user
writePasswordToSmartCard(password);
// Okay, here we don't need password anymore.
// We set it all to '\0' so it doesn't stay in memory.
std::fill(password.begin(), password.end(), '\0');
}
Теперь я беспокоюсь о оптимизации компилятора. Здесь компилятор может обнаружить, что пароль вот-вот будет удален, и что изменение его значения в этот момент бесполезно и просто удалит вызов.
Я не ожидаю, что мой компилятор будет заботиться о ценности будущей неохраняемой памяти.
Является ли моя озабоченность законной? Как я могу быть уверенным, что такой фрагмент кода не будет оптимизирован?