面试题答案
一键面试性能差异
- 一般情况下:在简单的短字符串复制场景中,
memcpy()
通常会比strcpy()
性能略高。 - 极端情况:当字符串非常短(比如只有一个字符),且编译器对
strcpy()
做了高度优化时,两者性能差异极小甚至可忽略不计。
产生差异的原因
strcpy()
:strcpy()
函数在复制过程中需要判断字符串是否结束,即遇到'\0'
才停止复制。这意味着每次复制一个字符都需要额外检查是否为'\0'
,增加了指令开销。- 例如:
char src[] = "abc"; char dest[10]; strcpy(dest, src);
,在复制'a'
、'b'
、'c'
每个字符时都要判断是否是结束符'\0'
。
memcpy()
:memcpy()
只负责按照指定的字节数进行复制,不需要对每个字节进行是否为'\0'
的判断。- 例如:
char src[] = "abc"; char dest[10]; memcpy(dest, src, 4);
(这里假设包含'\0'
共4个字节),它直接从源地址按字节数复制到目标地址,没有额外的结束判断开销,因此在简单短字符串复制场景下效率略高。