C23 标准草案中的函数memset_explicit()可以满足您的需求,但可能无法在当前版本的 C 标准库中实现。GNU Gnulibmemset_explicit() (GNU 可移植性库)包含一个可以根据 GNU 宽通用公共许可证条款合并到项目源代码中的版本。初始导入项目时假定该项目使用 Autoconf,因此对于不使用 Autoconf 的项目来说这可能会出现问题。
Gnulib实现memset_explicit()使用条件编译以各种方式实现该函数,例如调用memset_s()(如果可用)、在调用后添加内存屏障memset(),或者如果这些都无法使用,则memset()通过易失性函数指针进行调用。易失性函数指针的使用涉及定义和初始化函数指针,volatile_memset如下所示:
void * (* const volatile volatile_memset) (void *, int, size_t) = memset;
Run Code Online (Sandbox Code Playgroud)
memset()通过指针进行的调用volatile_memset不会被优化掉。
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |