t-kernel-zh team mailing list archive
-
t-kernel-zh team
-
Mailing list archive
-
Message #00010
[Open T-Kernel] memcpy 函数评审
未包含 stddef.h 函数,size_t 不可用,也有可能写程序的
人并没有验证程序就提交了,这是一个很严重的坏习惯。
> void myMemCpy(void *dest, void *src, size_t n)
函数没有返回值,无法判断复制结果是否成功。复制不成功的
原因有很多:
例如:
1 目标内存不可用
2 传进来的参数,目标地址或源地址是NULL
3 复制个数超出范围
> void myMemCpy(void *dest, void *src, size_t n)
源地址没有加 const 修饰,这个可以告诉调用者,不用备份
源地址的数据,编译器保证调用些函数之后保证源地址的数
据不会被破坏。
像做库里面的函数,可以先查一下手册,严格按照 C 库的要
求来做,这类问题完全可以避免。查查手册可以解决的事不查
不严谨。
> {
>
> char *csrc = (char *)src;
> char *cdest = (char *)dest;
> for (int i=0; i<n; i++)
这样的写法虽然没有什么问题,但是在这个项目里,我们禁止
这样的写法。
> cdest[i] = csrc[i];
这一句复制虽然没大问题,但是跳转一次,才复制一个字节,
效率是比较低的。处理器只有一半不到的时间在处理搬运数
据,大半的时间在跳转。
> }
--
Copyright (c) 2017 duhuanpeng <u74147@xxxxxxxxx>