Performance

cmp 比 diff -q 快嗎?

  • July 25, 2021

在最近關於檢查某些文件是否具有不同內容的 Ask Ubuntu 問題中,我看到一條評論指出,如果不同的部分無關緊要,cmp將比diff. 這個堆棧溢出答案cmp同意,給出了在第一個不同字節處停止的原因。但是,GNUdiff-q(or --brief) 標誌,它應該是report only when files differ. diff一旦發現任何差異,GNU 也會停止比較似乎是合乎邏輯的(就像在指定orgrep時在第一次匹配後停止搜尋一樣)。-l``-q

在 Linux 系統的上下文中,是否cmp真的比diff -q可能具有 GNU 版本的系統更快?

在@josten 的提示下,我對兩者進行了比較。程式碼在GitHub 上。簡而言之:

使用者系統

真實的

User+Sys 所花費的時間cmp -s似乎比diff大多數情況下要多一點。然而,實時拍攝幾乎是任意的——cmp在某些方面diff領先,在某些方面領先。

總結:

性能上的任何差異純屬巧合。隨心所欲地使用。

使用來自Anthon的類似但更大的文件(100M 行,僅在最後一個不同):

yes | head -n 100000000 >aa
sed '$ s/d/e/' >ab

我得到diff -q和的時間無法區分cmp -s

/tmp% time diff -q aa ab
Files aa and ab differ
diff -q aa ab  0.04s user 0.33s system 99% cpu 0.370 total
/tmp% time cmp -s aa ab
cmp -s aa ab  0.04s user 0.36s system 99% cpu 0.403 total

cmp比 慢cmp -s。大概計算行號是一個很大的負擔。

/tmp% time cmp aa ab
aa ab differ: char 499999999, line 100000000
cmp aa ab  0.84s user 0.36s system 97% cpu 1.225 total

這是在 Debian wheezy amd64 上,全部從 RAM 執行(在 tmpfs 上)。

cmp -s具有被所有 POSIX 平台和 BusyBox 支持的優勢。

引用自:https://unix.stackexchange.com/questions/153286