读书人

怎么看到编译器里面的库函数实现

发布时间: 2012-10-09 10:21:45 作者: rapoo

如何看到编译器里面的库函数实现
想看下哪些库函数memcpy, memmove, atoi具体怎么实现的,谢谢(我知道自己可以写个类似的)

[解决办法]
看LINUX内核代码
[解决办法]
\Microsoft Visual Studio\VC98\CRT\SRC 里头
MEMCPY.C
ATOX.C
MEMMOVE.C
[解决办法]
在你的vc安装目录下有代码,比如我的vs2005

C:\Program Files\Microsoft Visual Studio 8\VC\crt\src

memcpy.c
memmove.c
atox.c
atof.c


如果拟订是intel cpu,vc运行的时候可能是使用了汇编版本 :

C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\intel

memcpy.asm
memmove.asm

[解决办法]
库函数的实现是OS的部分,不属于编译器的事,编译器那里只有一个符合规范的接口而已...
[解决办法]
在VC安装目录下面找就行了..
库函数名.c直接打开就能看到..
[解决办法]
这个以前帖子有讨论过 我贴过来

C/C++ code
#include <stdlib.h>void main(){    int i = atoi("123");}编译连接这段程序:f10单步跟踪->到main里的那句后,按f11进入到atoi的函数体里:int __cdecl atoi(        const char *nptr        ){        return (int)atol(nptr);}再按f10、f11进入atol的函数体:long __cdecl atol(        const char *nptr        ){        int c;              /* current char */        long total;         /* current total */        int sign;           /* if '-', then negative, otherwise positive */        /* skip whitespace */        while ( isspace((int)(unsigned char)*nptr) )            ++nptr;        c = (int)(unsigned char)*nptr++;        sign = c;           /* save sign indication */        if (c == '-' || c == '+')            c = (int)(unsigned char)*nptr++;    /* skip sign */        total = 0;        while (isdigit(c)) {            total = 10 * total + (c - '0');     /* accumulate digit */            c = (int)(unsigned char)*nptr++;    /* get next char */        }        if (sign == '-')            return -total;        else            return total;   /* return result, negated if necessary */}想找其他函数也可以用类似的办法!
[解决办法]
vc带运行时源码,可以参考一下

读书人网 >C++

热点推荐