第2章从内核出发

内核开发的特点

 

内核编程时不能访问C库。

内核编程时必须使用GNU C。

内核编程时缺乏像用户空间那样的内存保护机制。

内核编程时浮点数很难使用。

内核只有一个很小的定长堆栈。

由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发。

要考虑可移植性的重要性。

 

 

GCC 特有的一些东西

 

内联(inline)函数

定义一个内联函数的时候,需要使用static作为关键字,并且用inline限定它。比如:

 

static inline void dog(unsigned long tail_size) 

内联函数必须在使用之前就定义好,否则编译器就没法把这个函数展开。实践中一般在头文件中定义内联函数。由于使用了static作为关键字进行限制,所以编译时不会为内联函数单独建立一个函数体。如果一个内联函数仅仅在某个源文件中使用,那么也可以把它定义在该文件开始的地方。

在内核中,为了类型安全的原因,优先使用内联函数而不是复杂的宏。

 

内联汇编

一般是在相应的体系结构里面用的,  ARM 混合 C 编程的时候这样用过.

C ARM汇编 混合编程

 

分支声明

就是把概率出现较小的分支用 宏 unlikely() 对 条件表达式定义下,应该就是物理内存尽可能不出现他.
例如,下面是一个条件选择语句:

if (foo) {  
        /* ... */  
} 
如果想要把这个选择标记成绝少发生的分支:

/* 我们认为foo绝大多数时间都会为0... */  
if (unlikely(foo)) {  
        /* ... */  
} 

相反,如果我们想把一个分支标记为通常为真的选择:

/* 我们认为foo通常都不会为0 */  
if (likely(foo)) {  
        /* ... */  
} 

没有内存保护机制

....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值