为什么 ZeroMemory()
以及在 C 标准库中已经存在 memset 和相关调用时 Windows API 中存在类似调用?我应该打电话给哪些?我猜答案是“取决于”。什么?
原文由 CannibalSmith 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么 ZeroMemory()
以及在 C 标准库中已经存在 memset 和相关调用时 Windows API 中存在类似调用?我应该打电话给哪些?我猜答案是“取决于”。什么?
原文由 CannibalSmith 发布,翻译遵循 CC BY-SA 4.0 许可协议
ZeroMemory
这些是 Windows API 本身的一部分。 memset
是 C 标准库的一部分。
对于典型的用户态代码,我通常会使用 memset
(或您选择的语言提供的等价物)。如果您正在使用类似 ZeroMemory
的方式编写内核代码(例如,设备驱动程序),则更具吸引力。由于您的代码无论如何都在内核模式下执行,因此您不会产生使用它的任务切换成本。由于它已经在 Windows 代码中,因此您无需在驱动程序中携带额外的代码来复制已经存在的内容。同时,您确实会产生函数调用的成本,并且在将内存归零(尤其是一小块)的情况下,内联代码可能会明显更快,并且 rep stosd
不需要很多代码(事实上,设置和使用 rep stosd
可能比函数调用需要更少的代码)。
原文由 Jerry Coffin 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
在 C 和 C++ 中,
ZeroMemory()
和memset()
是完全相同的东西。那为什么要使用
ZeroMemory()
呢? 让它显而易见。 但我更喜欢memset()
在 C 或 C++ 程序中。