Предотвращает ли использование «указателя на энергозависимость» постоянную оптимизацию компилятора?

Вот проблема: ваша программа временно использует некоторые конфиденциальные данные и хочет стереть их, когда они больше не нужны . Использование std :: fill () само по себе не всегда помогает - компилятор может решить, что блок памяти не будет доступен позже, так что его стирание - пустая трата времени и исключение стирания кода.

Пользователь ybungalobill предлагает использовать изменчивое ключевое слово :

{
  char buffer[size];
  //obtain and use password
  std::fill_n( (volatile char*)buffer, size, 0);
}

Цель заключается в том, что увидев ключевое слово volatile , компилятор не будет пытаться исключить вызов std :: fill_n () .

Будет ли ключевое слово volatile всегда препятствовать компилятору удаление кода изменения памяти?

6
задан Community 23 May 2017 в 12:04
поделиться