相关疑难解决方法(0)

为什么像"volatile int*p"这样的点到易失性指针很有用?

volatile是告诉编译器不要优化引用,这样每次读/写都不会使用存储在寄存器中的值,而是进行实际的内存访问.我可以理解它对一些普通变量有用,但不明白如何volatile影响指针.

volatile int *p = some_addr;
int a = *p; // CPU always has to load the address, then does a memory access anyway, right?
Run Code Online (Sandbox Code Playgroud)

如果它被宣布为有什么区别int *p = some_addr

c pointers volatile

71
推荐指数
2
解决办法
6万
查看次数

使用"指向volatile的指针"是否始终阻止编译器优化?

问题在于:您的程序暂时使用了一些敏感数据,并希望在不再需要时删除它.使用std::fill()on本身并不总是有用 - 编译器可能会决定以后不访问内存块,因此擦除它是浪费时间并消除擦除代码.

用户ybungalobill建议使用volatile关键字:

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

目的是在看到volatile关键字后,编译器不会尝试消除对该调用的调用std::fill_n().

请问volatile关键字总是会阻止编译器修改代码吗?

c++ volatile

6
推荐指数
1
解决办法
509
查看次数

不会被优化掉的 Memset 内存

这与这个问题相关:有没有一种方法可以在使用完缓冲区后对其进行内存设置(例如出于安全考虑)而不对其进行优化?

尝试将指针强制转换为易失性指针,收到有关将易失性指针发送到不需要易失性的函数的警告。

c buffer memset

1
推荐指数
1
解决办法
406
查看次数

标签 统计

c ×2

volatile ×2

buffer ×1

c++ ×1

memset ×1

pointers ×1