任意のサイズの 2 つの整数を比較するための、かなり標準的な C (Linux) 関数、またはコード効率が良いがパフォーマンスの良いアプローチはありますか?
int intcmp(const void *a, const void *b, size_t size)
整数a
とb
実用的なサイズで機能するパラメーターを持つものを探していますsize
。(memcmp()
アーキテクチャがビッグエンディアンの場合はうまくいくと思います。)
私がよく使用する実装は次のようになります ( Efficient integer compare functionからの改善があります) が、完全に汎用的ではなく、コードのオーバーヘッドが十分にあるため、スロットに入れる前によく考えます。
int intcmp(const void *a, const void *b, size_t size) {
#define CASE_SIZE_RETURN_A_B_CMP(_t) \
case sizeof(_t): \
return ((*(_t *)(a) > *(_t *)(b)) - (*(_t *)(a) < *(_t *)(b)))
switch (size) {
CASE_SIZE_RETURN_A_B_CMP(char);
CASE_SIZE_RETURN_A_B_CMP(short);
CASE_SIZE_RETURN_A_B_CMP(int);
CASE_SIZE_RETURN_A_B_CMP(long long);
}
#undef CASE_SIZE_RETURN_A_B_CMP
assert(0);
return 0;
}