【发布时间】:2015-11-24 02:24:45
【问题描述】:
如果我有一个strncmp() 的实现来检查两个字符串是否相同,我可以通过执行以下操作来显着优化它吗:
if (str1 == str2) {
return true;
} else {
/* Do real comparison here */
}
请注意,由于我正在实现与 C 库不同的东西,所以这些是非标准的,这是故意的。
这背后的逻辑是:如果两个字符串实际上指向同一个位置,那么它们一定是相同的。这可以节省大量检查字符串是否长的时间。
【问题讨论】:
-
但是如果它们没有指向同一个位置,那么你的代码就会变慢。是否有可能使用指向同一位置的两个指针调用您的函数?
-
它在标准库中,所以不确定。取决于调用程序。
-
如果你正在编写一个库,那么不要强迫用户承担任何惩罚。如果用户的代码可能使用两个相同的指针调用库函数,则用户可以在调用库函数之前执行此测试。
-
我想不出有一次我调用 strcmp 或 strncmp 时两个参数可能相等。
-
我不知道你的问题是什么。它是什么?您可以检查,但在这种情况下,您实际上应该警告调用者,例如 您的代码中有一个错误,您正在调用
strncmp()并且两个参数都指向同一个地方。而且似乎该错误存在于您的代码中,因为您说它提高了性能。所以检查执行此操作的代码并修复它。
标签: c string optimization