gpt4 book ai didi

c# - ASM 中小端到大端的快速转换

转载 作者:太空狗 更新时间:2023-10-29 22:29:22 24 4
gpt4 key购买 nike

我在 C# 中有一个 uint 类型的数组,在检查程序是否在小端机器上运行后,我想将数据转换为大端类型。因为数据量可以变得非常大但总是均匀的,所以我想考虑将两个 uint 类型作为一个 ulong 类型,以获得更好的性能并在 ASM 中编程,所以我正在寻找一个非常快的(如果可能的话最快的) 将小端转换为大端的汇编算法。

最佳答案

对于大量数据,bswap 指令(在 _byteswap_ushort, _byteswap_ulong, and _byteswap_uint64 内部函数下的 Visual C++ 中可用)是可行的方法。这甚至会胜过手写汇编。这些在没有 P/Invoke 的纯 C# 中不可用,因此:

  1. 仅当您有大量数据要进行字节交换时才使用此方法。
  2. 您应该认真考虑使用托管 C++ 编写最低级别的应用程序 I/O,这样您就可以在将数据放入托管数组之前进行交换。您已经必须编写一个 C++ 库,因此没有什么可损失的,并且您可以避免在大型数据集上运行的低复杂度算法的所有与 P/Invoke 相关的性能问题。

PS:很多人都不知道字节交换内在函数。它们的性能是惊人的,对于 float 据来说更是如此,因为它将它们作为整数处理。如果不为每个单字节交换用例手动编码寄存器加载,就无法战胜它,如果您尝试这样做,您可能会在优化器中遭受比以往任何时候都更大的打击。

关于c# - ASM 中小端到大端的快速转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com