可以放置新的生存优化,不像内存集
Can placement new survive optimization, unlike memset?
所以我真的很好奇它是否能在GCC和clang采用的积极优化策略中幸存下来。
考虑以下示例:
void* clean(void* pointer, std::size_t size) noexcept
{
return new(pointer) char[size]{};
}
void doStuff()
{
//...
clean(pointer, size);
//...
}
我可以信任它来清理敏感数据吗?
我不认为优化可以在这里对你玩任何技巧。标准要求值初始化在本例中:new(pointer) char[size]{}
,因此在此调用后由pointer
指向的存储器将填充0。
如果您从不访问新指针或在访问之前覆盖它(基于可观察性),编译器可以优化它。如果你想避免这种轻微的可能性,你需要将指针定义为指向volatile
的指针。
我不确定这是对您的问题的答案还是只是一个旁注,但您可以使用编译器指令禁用对该特定函数optimize()
优化
void* __attribute__((optimize("O0"))) clean(void* pointer, std::size_t size) {
// unmodifiable compiler code
}
这将确保您的clean()函数不会被优化
相关文章:
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- C++二和.优化内存使用
- 如何控制或优化或删除或释放 UNION 中未使用的内存
- 如果 RMW 操作没有任何变化,是否可以针对所有内存顺序对其进行优化
- std::stable_sort: 如何选择内存优化算法而不是时间优化算法?
- 字符串编码用于内存优化
- 编译器内存优化 - 重用现有块
- 编译器是否优化析构函数中的内存集
- 矢量函数的C 内存优化
- 如何在CPU和内存中优化C 中的重型地图插入
- C++对间接运算符的标准描述是否保证内存写入不会被优化掉
- 内存分配,用于在C 11中循环中函数的返回值:如何优化
- 编译器优化了内存分配
- C++字符串内存重用优化
- 优化地形渲染的内存
- 内存对齐优化不仅性能,而且内存大小
- 优化数据结构,使其充分利用虚拟内存
- 有没有一种更快的方法或优化我可以应用到我的即兴内存池
- 优化内存读取和写入的长期运行
- 优化内存和性能的传输数据缓冲区