我正在考虑在C#中进行一些Bitwise操作,并希望确保我充分利用CPU和总线。我还想构建我的内存数据,这样就不会产生不必要的负载(将数据与内存页面对齐)。
作为.NET开发人员,我可以针对内存中的数据结构和对齐实现硬件/ CPU特定的优化吗?
答案 0 :(得分:1)
对于像位移(注释)这样的事情,只要你在标准数据边界工作就没关系 - CPU将以尊重CPU的字节顺序的方式转换。但是,如果您的数据“自然地”是一个字节数组,并且您通过“不安全”将其视为长数组作为优化,则将重要:左移很长不同于左移8个字节独立。然而,“关于数据类型的谎言”可能是一种有用的优化:例如,Web套接字屏蔽是在32位xor应用于数据时完成的,这是一个字节序列。通过一些技巧,可以减少64位xors数量,加上最多7个xors。
答案 1 :(得分:1)
您可以使用FieldOffsetAttribute控制数据的内存中表示。这是类/结构定义的一部分,因此它不能在运行时更改,尽管您可以为x86优化一个,为x64优化一个,并在运行时决定使用哪个。
但问题的标题会有所不同。只要您通过内置操作执行按位操作,运行时就会将代码映射到等效的语义指令。我想说的是:
byte f(byte a, byte b){return a ^ b;} // or whatever
必须在其运行的每个平台上表现相同。如果你这样做“不安全”的话,Marc Gravell的评论确实适用。也许你打算做什么 - 这对我来说有点不清楚。