转了个圈,又回来了
分类: LINUX
2010-06-03 15:02:37
1. 内核栈是非常小的,而且是被内核空间调用链共享的。因此尽量在内核中采用动态分配变量。内核态的堆是很大的,可以将整个系统空闲内存都视为内核堆。
2. 内核代码是不做浮点运算的。
3. 内核态下的同步与互斥问题是非常重要的。
4. 内核API函数中以双下划线(__)开始的函数是底层接口组件,一般不要使用。
内核符号表:表中包含了全局内核项的地址 -- 函数和变量。模块输出的符号将成为内核符号表的一部分,在别的模块中要使用这些函数或者变量之前声明为extern符号就可以了。
内核不能连接使用标准C库的函数,只能调用内核符号表中的实现了的函数,还好大部分C库函数在内核中都已经得到了实现。
内联函数:如果一个函数反复被调用,可以将这个函数声明为一个内联函数,函数会在它所调用的位置上展开,这么做可以消除函数调用和返回所带来的开销。编译器会把调用函数和展开的内联函数的代码一起优化。因为编译器会检查内联函数的安全性,所以优先使用内联函数而不是复杂的宏定义。还有内联函数定义的时候需要用static作为关键字。