Linux内核libc与应用libc,出于好奇:为什么linux内核“优化”strcpy比libc imp慢得多?...

#include

#include

char *_strcpy(char *dest, const char *src)

{

int d0, d1, d2;

asm volatile("1:\tlodsb\n\t"

"stosb\n\t"

"testb %%al,%%al\n\t"

"jne 1b"

: "=&S" (d0), "=&D" (d1), "=&a" (d2)

: "0" (src), "1" (dest) : "memory");

return dest;

}

int main(int argc, char **argv){

int times = 1;

if(argc >1)

{

times = atoi(argv[1]);

}

char a[100];

for(; times; times--)

_strcpy(a, "Hello _strcpy!");

return 0;

}

并使用(time ..)显示它比常规strcpy(在x64 linux下)慢约x10

为什么?

最佳答案 如果您的字符串是常量,则编译器可能正在内联副本(对于plain strcpy调用),使其成为一系列无条件MOV指令.

因为这是无条件的线性代码,所以它比linux变体更快.

libc.2.27.so是一个C标准函数库文件,通常用于Linux操作系统和一些其它Unix-like系统。libc库是操作系统提供给应用程序的一个重要组成部分,它包含了一系列的标准C库函数,这些函数可以提供对操作系统底层功能的访问和控制。 libc.2.27.so是在GNU C库(glibc)项目中的版本号为2.27的库文件。glibc是一个由自由软件基金会开发和维护的C函数库,为在UNIX和类Unix操作系统上编写应用程序提供了很多基本功能。它的目标是提供对POSIX标准的完全支持,并扩展到支持其他操作系统特定的功能。 libc包含了一系列的C函数,例如内存管理函数(如malloc和free)、字符串处理函数(如strcpy和strcat)、文件操作函数(如open和read)等等。这些函数为开发者提供了在应用程序中进行内存管理、字符串处理、文件操作等常见任务的基本工具。 通过libc,开发者可以使用这些函数来快速编写高效可靠的应用程序,而无需关注底层的细节实现。libc还提供了与操作系统通信的接口,使得应用程序能够访问和控制底层的资源,如文件系统、网络、进程等。 更新的libc版本通常会修复一些已知的bug和漏洞,并且提供一些新的功能和改进。因此,将libc更新到最新版本是保证应用程序安全和性能的重要一步。 总之,libc.2.27.so是一个重要的C函数库文件,它为开发者提供了访问和控制操作系统底层功能的接口,帮助他们编写高效可靠的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值