摘要: c语言中*P=NULL的作用书上说NULL对暂时不用的指针变量赋初值如 int *p=NULL但书上又说企图用*p=5给p所指向的存储单元赋值,则系统将给用户一个错误信息为什么呢?赋初值之后想用到这个指针变量了 想赋5 哪里不可行了?我这里没弄懂答:p是个指针,指针是指向一个地址的,地址里面存放的才是值,int *p=NULL,意思是虽然给*p本身分配了一个空间但是p本身没有指向一个确定的地址。可能是栈上的一个地址,也可能是静态数据区,还可能是系统核心数据区 。更不要说地址里面的值了,如果你程序里想让P指向一个值,先得让他指向一个地址,比如说 int *p=&a 意思是给P分配了一个整 阅读全文
posted @ 2013-05-22 16:31 tangr206 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 一。new/delete 与 malloc/free 的区别1。new自动计算需要分配的空间,而malloc需要手工计算字节数2。new是类型安全的,而malloc不是,比如:int*p=newfloat[2];//编译时指出错误int*p=malloc(2*sizeof(float));//编译时无法指出错误------以上两点只是改进,但以下两点malloc就无能为力了newoperator由两步构成,分别是operatornew和construct3。operatornew对应于malloc,但operatornew可以重载,可以自定义内存分配策略,甚至不做内存分配,甚至分配到非内存设备 阅读全文
posted @ 2013-05-22 14:30 tangr206 阅读(241) 评论(0) 推荐(0) 编辑
摘要: copy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0.这么简单的一个函数却含盖了许多关于内核方面的知识,比如内核关于异常出错的处理.从用户空间拷贝数据到内核中时必须非常小心,如果用户空间的数据地址是个非法的地址,或是超出用户空间的范围,或是那些地址还没有被映射到,都可能对内核产生很大的影响,如oops,或者被造成系统安全的影响.所以copy_from_user函数的功能就不只是从用户空间拷贝数据那样简单了,它还要做一些指针检查以及处理这些问题的方法.下面我们来仔细分析下这个函数.函数原型在[arch/i386/lib/usercopy.c 阅读全文
posted @ 2013-05-22 10:39 tangr206 阅读(921) 评论(0) 推荐(0) 编辑
摘要: linux用户态和内核态切换理解Linux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程的4GB地址空间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过write,send等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执行这些代码完成操作 阅读全文
posted @ 2013-05-22 09:59 tangr206 阅读(566) 评论(0) 推荐(0) 编辑