|
|
1
7
正确的方法是调用
不幸的是,这种解决方案可能效率不高,因为易失性类型的性质可以防止各种优化,它可能会阻止编译器使用最佳的汇编指令,并可能导致效率较低的代码。另一个问题
如果你不能使用
总之,无论您选择什么,强烈建议您始终检查生成的可组装代码,确保内存实际上已被清除,并且没有任何内存调用被优化掉。 示例1。
示例2。
|
|
2
1
也许一个好的、语言中立的方法是让某些东西依赖于内存中的值。例如,您可以先将内存全部设置为零, 然后 迭代所有字节,将它们异或到一个临时变量中。如果答案不是零,则引发异常。当然,这种异常永远不会发生,但编译器不太可能解决这个问题(特别是如果XOR不是在不同的循环构造中执行的,因此需要按顺序执行操作)。 这还有抛出错误的额外好处 (如果比较字节,则256个字节中可能有255个字节)如果阵列被更改或(非零)关键材料留在阵列中。在可以更改CPU执行的嵌入式环境中,这可能是一个好主意。 该操作相对高效,因为它由一个具有预定义循环数的单循环和一个 如果 -构造,当然除了内存访问。 这可以与将数组内容设置为零的安全方法相结合,如 in the answer of Malin 。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |