1. 前言
本系列源于一场面试,面试官要求我对 memcpy 函数的进行重现。由于在平常的程序开发中对于这类轮子函数一般只掌握函数的调用方法便足够了,也没有去一探其底层实现原理,于是自然而言面试失败了。
因此,吃一堑长一智,我萌生了把常用的轮子函数一一重现出来的计划,也当作是对这些函数的重新学习!
2. 重现说明
在重现函数过程中,以下几点引发了我的思考:
NULL
、'\0'
、0
的区别
本质上,三者都为 0,但应区分出它们的用途以提高程序的可读性。在关于指针是否指向 0 地址时,应该使用
NULL
表示 0 地址;在关于字符串时,应使用'\0'
表示字符串的结尾;而数字0
,可以作为字面量用于赋值时的右值。
- 效率问题
无论是对内存的操作函数还是关于字符串的操作函数,存在大量的内存访问情况,如果只按字节为单位进行内存访问,这样的效率是很低的。在合适的情形下,可以按位宽为单位进行内存访问,这样能够大大提高访问的效率。因此,我在函数重现中会大量地采用该方法提高程序的效率。
- 变量名称规范
为了程序的可读性,变量名称应简明表达出变量所代表的含义。以下为函数中关于变量命名的一些规范:
- dest:目标(destination)
- src:源(source)
- num:数值(number)
- len:长度(lenght)
- var:变量(variation)
- str:字符串(string)
- tmp:临时变量(temp)
- count:计数(count)
- i、j:局部循环变量
3. 文章索引
以下为函数重现系列的文章索引,以便查阅,不定期更新: