这里的问题是:您的程序暂时使用了一些敏感数据,并希望在不再需要时将其擦除。仅对自身使用
意图是,当看到
std :: fill()
并不能总是起到作用 - 编译器可能会认为内存块以后不会被访问,因此擦除代码是浪费时间,从而消除擦除代码。
用户ybungalobill建议{{link3:使用volatile
关键字:}}{
char buffer[size];
//obtain and use password
std::fill_n( (volatile char*)buffer, size, 0);
}
意图是,当看到
volatile
关键字时,编译器将不会尝试消除对std::fill_n()
的调用。
volatile
关键字是否总能防止编译器消除此类内存修改代码?
volatile char buffer[size];
而不是在调用std::fill_n
时进行转换。 - Thomas Matthews