2

如何将快速的两个(可变大小)内存区域作为二进制进行比较?

int compare (void *a,void *b,size_t size){
...
}


// reg1 > reg2
reg1 = 00001000000000000000000000000000000000000000 (binary);
reg2 = 00000100000000000000000000000000000000000000 (binary); 

if (compare(reg1,reg2,32) > 0){
  return true;
}else{
  return false;
};
4

1 回答 1

3

所有比较都使用本机二进制执行,因为这是内部表示,除非您需要比较二进制数的文本表示。

对于特定于平台的答案,请检查您平台处理器的汇编语言。许多现代处理器都有用于比较内存区域的汇编语言指令。

正如其他评论者所说,memcmp这是您的最佳选择,因为它应该针对您的平台进行优化。

如果你必须自己写,我建议从记忆中加载一个单词并逐字比较记忆,直到没有匹配。如果您需要更多详细信息,请逐字节比较单词以找出确切的差异所在。

于 2013-11-09T18:42:49.187 回答