Beautiful Code {16. The Linux Kernel Driver Model: The Benefits of Working Together}
2010-02-24 22:42
531 查看
题目好像很玄的样子,有点《集市与教堂》的味道。
从代码上来讲,这是一个用c实现面向对象的继承特性,像是解释C++的继承如何实现的。记得有个朋友提醒过我子类对象的内存不一定是父类的内存在后面,虽然实际是这样的,但标准没有要求。
看到((type *)0)->member就感觉很亲切。通过这个宏把一个“父类”的指针转成“子类”的指针,没有类型检查,转错概不负责,作者解释了为什么没有在“父类”中加上类型标识,他觉得程序员应该清楚可不可以转,而不是让代码去判断。这个解释我接受。
另外作者重点介绍了device结构的演化过程,迭代式的。根据需求对模块拆分,直至每个模块的功能十分单一,比如负责引用计数的模块,然后,通过“继
承”把这些合并成一个模块。继承的意义也就在于此,不同层次的抽象。但是,我觉得这个也像组合,虽然组合的模块之间有继承关系,纠结,其实目的都是高内
聚,两种方式而已。
这个迭代的过程就是开源开发者的合作的过程了,对此我只能仰视。
从代码上来讲,这是一个用c实现面向对象的继承特性,像是解释C++的继承如何实现的。记得有个朋友提醒过我子类对象的内存不一定是父类的内存在后面,虽然实际是这样的,但标准没有要求。
#define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (char *)__mptr - offsetof(type,member) );})
#define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (char *)__mptr - offsetof(type,member) );})
看到((type *)0)->member就感觉很亲切。通过这个宏把一个“父类”的指针转成“子类”的指针,没有类型检查,转错概不负责,作者解释了为什么没有在“父类”中加上类型标识,他觉得程序员应该清楚可不可以转,而不是让代码去判断。这个解释我接受。
另外作者重点介绍了device结构的演化过程,迭代式的。根据需求对模块拆分,直至每个模块的功能十分单一,比如负责引用计数的模块,然后,通过“继
承”把这些合并成一个模块。继承的意义也就在于此,不同层次的抽象。但是,我觉得这个也像组合,虽然组合的模块之间有继承关系,纠结,其实目的都是高内
聚,两种方式而已。
这个迭代的过程就是开源开发者的合作的过程了,对此我只能仰视。
相关文章推荐
- Beautiful Code {16. The Linux Kernel Driver Model: The Benefits of Working Together}
- enjoy the beautiful linux kernel code
- How to get Linux Kernel Source Code of Android?
- kali 安装virtualbox tools出错ERROR: UNABLE TO FIND THE SOURCES OF YOUR CURRENT LINUX KERNEL.
- How can I get the IPv4 address of an interface in linux from C code ?
- VirtualBox安装VBoxLinuxAdditions错误:unable to find the sources of your current linux kernel
- CPU frequency and voltage scaling code in the Linux(TM) kernel
- redhat 6.4 安装VirtualBox自动增强功能功:unable to find the sources of your current Linux kernel
- VirtualBox安装VBoxLinuxAdditions错误:unable to find the sources of your current linux kernel
- The Proccess of Loading and Executing a Specific Program in Linux Kernel
- War of the Worlds - Hijacking the Linux Kernel from QSEE
- Linux Kernel driver model
- understanding the kernel of the linux the third vesion
- The Windows Driver Model Simplifies Management of Device Driver I/O Requests(WDM对设备驱动I/O请求管理的简化)
- the instructuion of ARMLinux kernel Compile
- Abuse of the Linux Kernel for Fun and Profit
- The VirtualBox kernel modules do not match this version of VirtualBox 解决 (linux update,nvidia失败)
- Linux kernel config -- the least config of 2.6.32
- Linux kernel driver model
- The Linux Kernel Device Model - Overview -- Linux 内核设备模型概述