copy_to_user在每次拷贝时需要检测指针的合法性,也就是用户空间的指针所指向的地址的确是一段该进程本身的地址,而不是指向了不属于它的地方,而且每次都会拷贝一次数据,频繁访问内存,由于虚拟地址连续,物理地址不一定会连续,从而造成CPU的CACHE频繁失效,从而使速度降低
它是用来检查参数中一个指向用户空间数据块的指针是否有效,如果有效返回非零,否则返回零。
参数to的时候有个__user限定,这个在~/include/linux/compiler.h中有如下定义:
# define __user
表示这是一个用户空间的地址,即其指向的为用户空间的内存
__attribute__是gnu c编译器的一个功能,它用来让开发者使用此功能给所声明的函数或者变量附加一个属性,以方便编译器进行错误检查,其实就是一个内核检查器。