其他
ggad
分类
搜索
21 Aug.2010

函数从linux内核中学到的编程技能转内核

作者: 3wjj   分类:软文教程   出处:本站原创            | |
函数  常量  属性  编译器  示例  内核  表达式  地址  分支  代码  结构  实例  定义  数组  源代码  中缀  职员  外地  参数  消息  结果  通知  别号  大年夜  依此类推  内联  鄙人  功用  相称  差错  原型  初始化  手艺  中用  有条件  启事  变量  使用方法  范畴  数目  语句  时分  局部  本土  仓库  清单  细致  形状  分明  符号
Cong∴linuxNei∴He∴Zhong∴Xue∴Dao∴De∴Bian∴Cheng∴Ji∴Neng∴Zhuan1建立泛型宏
define min  _min1 = 。    typeof _min2 = 。     。   _min1 lt。 _min2  _min1 : _min2。 )大年夜家看了就分明是甚么意义了可是我还有几点疑问 。这行代码是用来干甚么的为甚么的外面要加!不加的时分编译是不经过的!细致是甚么启事
2 范畴的扩大年夜  switch 语句  switch     case 1 ... 3:       printf。       break。   case 4 ... 8:       printf。       break。    数组的初始化    int widths =  0 ... 9 = 1! 10 ... 99 = 2! 100 = 3 。以上局部外核中用的很多
3 零长度的数组struct iso_block_store         atomic_t refcount。        size_t data_size。        quadlet_t data0。。这答应结构中的元荤援用结构实例前面紧接着的内具有需求数目可变的数构成员时!这个特征很有效使用实例struct iso_block_store  p =malloc + data_size)。
4 取得函数的前往地址以下面的代码所示!__builtin_return_address 接收壹个称为 level 的参数这个参数定义期看获得前往地址的调用仓库级别例如!假设指定 level 为 0!那么就是恳求以后函数的前往地址假设指定 level 为 1!那么就是恳求停止调用的函数的前往地址!依此类推
void  __builtin_turn_address。
正鄙人面的示例中!local_bh_disable 函数正在本土处理器上禁用软中缀!从而遏止正在以后处理器上运转 softirqs!tasklets 和 bottom halves使用 __builtin_return_address 捕捉前往地址!以便正在当行停止跟踪时使用这个地址
void local_bh_disable        __local_bh_disable__builtin_return_address)。
5 常量检测
正在编译时!能够使用 GCC 供给的壹个内置函数辨别壹个值可否是常量这类消息拾分有价值!因为能够结构出能够经过常量叠算优化的表达式__builtin_constant_p 函数用来检测常量
__builtin_constant_p 的原型以下所示留心!__builtin_constant_p 实在不克不及检测出壹切常量!因为 GCC 不简单证实某些值可否是常量
int __builtin_constant_p
Linux 相称屡次地使用常量检测正在清单 3 所示的示例中!使用常量检测优化 roundup_pow_of_two 宏假设发觉表达式是常量!那么就使用能够优化的常量表达式假设表达式不是常量!就调用另壹个宏函数把值向上取整到 2 的幂
define roundup_pow_of_two       1 :      - 1) + 1))        ) :   __roundup_pow_of_two   )
6 函数属性
GCC 供给很多函数级属性!能够经过它们向编译器供给更少数据!辅佐编译器施行优化本节描绘与功用相干联的壹些属性
属性经过其他符号定义指定了别号能够以此辅佐浏览源代码参考!了解属性的使用方法
define __inline__     __inline__      __attribute__) define __deprecated           __attribute__) define __attribute_used__     __attribute__) define __attribute_const__     __attribute__) define __must_check            __attribute__)
定义是 GCC 中可用的壹些函数属性它们也是正在 Linux 内核中最有效的函数属性下面解说若何使用这些属性
always_inline 让 GCC 以内联方法处理指定的函数!不管可否启用了优化
deprecated 指出函数曾经被放弃!不该当再使用假设试使用曾经放弃的函数!就会收到正告还能够对类型和变量使用这个属性!匆匆使开拓职员尽能够少使用它们
__used__ 通知编译器不管 GCC 可否发觉这个函数的调用实例!都要使用这个函数这对于从汇编代码中调用 C 函数有辅佐
__const__ 通知编译器某个函数是有形状的
warn_unused_result 让编译器检查壹切调用者可否都检查函数的结果这确保调用者适外地检验函数结果!从而能够适外地处理差错
下面是正在 Linux 内核中使用这些属性的示例deprecated 示例来自与系统结构相干的内核!const 示例来自 IA64 内核源代码
int __deprecated __check_regionstatic enum unw_register_index __attribute_const__     decode_abreg
7 分支猜测提醒
正在 Linux 内核中最经常使用的优化手艺之壹是 __builtin_expect正在开拓职员使用有条件代码时!经常知道最能够施行哪个分支!而哪个分支很少施行假设编译器知道这类猜测消息!就可以够盘绕最能够施行的分支天生最优的代码1建立泛型宏 define min_min1 = 。typeof _min2 = 。。_min1 lt。 _min2_min1 : _min2。 )大年夜家看了就分明是
黑客资源网  http://www.hkzy.info
发表评论
  昵称 [注册]
  密码 (游客无需密码)
  网址
  电邮
OpenID登入 权限选项 表情