Вот проблема: ваша программа временно использует некоторые конфиденциальные данные и хочет стереть их, когда они больше не нужны . Использование std :: fill ()
само по себе не всегда помогает - компилятор может решить, что блок памяти не будет доступен позже, так что его стирание - пустая трата времени и исключение стирания кода.
Пользователь ybungalobill предлагает использовать изменчивое
ключевое слово :
{
char buffer[size];
//obtain and use password
std::fill_n( (volatile char*)buffer, size, 0);
}
Цель заключается в том, что увидев ключевое слово volatile
, компилятор не будет пытаться исключить вызов std :: fill_n ()
.
Будет ли ключевое слово volatile
всегда препятствовать компилятору удаление кода изменения памяти?