当前位置: 首页 > 编程日记 > 正文

慢慢学Linux驱动开发,第十章,GNU C的扩展

  内核开发者使用的C语言涵盖了ISO C99标准和GNU C扩展特性。这里简单介绍一下GNU C的扩展特性。

  1.内联(inline)函数

  GNU的C编译器支持内联函数,也是C++的一个特性之一。就是函数会在所调用的位置上展开,这样做虽然会导致代码量的增加,会占用更多的内存空间或者占用更多的指令缓存,但是确可以消除函数调用和返回所带来的开销,对于那些代码量少又需要经常调用的函数来说还是必须的。所以很显然对于一个很长的程序是不建议定义为内联函数的。

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

  static inline void Set_Bit(UINT8 res);

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

  因为宏定义不具有类型检查的优点,所以建议优先使用内联函数而不是复杂的宏。

  2.内联汇编

  GCC编译器支持在C函数中嵌入汇编指令。注意体系结构的不同,汇编不具有移植性。

  3.分支声明

  对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏,比如likely()和unlikely():

  /*foo几乎不出现*/
  if(unlikely(foo))
  {}
/*foo经常出现*/
if(likely(foo))
{}



转载于:https://www.cnblogs.com/pang123hui/archive/2012/03/08/2385768.html

相关文章:

vMA学习笔记之一:将vMA加入域

目的: 将vMA加入域的方法 操作步骤: 1、 开启vMA 2、 按住AltF2切换到虚拟终端界面,使用vi-admin用户登录 2 3、 已经登录进来了 4、 在进行加域操作之前,必须确保DNS配置正确(在初始化安装的时候会提示你设置DNS&…

关于DWG文件转换成PDF

最近有这样一个需求,客户会提供DWG文件,因为DWG文件是不能直接在网页上显示的,所以必须对他做处理,要求是转换成PDF格式。我查了很久的资料,很多都是基于C#和.NET的方法,而且都是说的很模糊,不是…

剑指offer--day07

1.1 题目:反转链表:输入一个链表,反转链表后,输出新链表的表头。 1.2 思路:这道题,我们要做到的是反转链表,我们的思路是将前一个节点与后一个节点断开,然后让后一个节点指向前一个节…

【蓝桥java】递归基础之计算共多少种走法

计算从某个位置(x,y)走到(0,0) 一共多少种走法 代码实现: package xn.zzunit.recurrence;/*** 从某个位置(x,y)走到(0,0) 一共多少种走法* author tyrantForever**/ pub…

数据库设计的三大范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。在实际开发中最为常见的设计范式有三个&#xf…

JS得到对应字段 的值。遍历

这个写法不是经典。我受感触是因为。我写很多代码,没去想过怎么样去节省我们的开发时间,应该去写一些通用性的代码。 而且。我也没有把C#代码优化的思想转到各个地方。像JS的代码。我就没去想过怎么去优化。 加油吧。 function getPageListSet(pageIndex…

微信小程序开发中如何实现侧边栏的滑动效果?

原文链接:https://mp.weixin.qq.com/s/7CM18izpZqf0oc0D75IGmQ1概述在手机应用的开发中侧边栏滑动是很常见的功能,当然在小程序中也不会例外,很多特效还没有成熟案例,只能原生重写,所以今天在网上为大家收集整理来几个…

采购审批专题总结--bob

一采购审批设置的一般步骤: 前置步骤 ①定义安全性控制 N:PO/设置/采购/单据类型 ②使用审批结构 N:PO/设置/组织/财务选项 ③安全层次结构选择 N:PO/设置/组织/采购选项 ④采购…

【蓝桥java】递归基础之39级台阶

题目: 小明刚刚看完电影《第39级台阶》。离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,…

Linux服务器安装配置JDK

一、准备工作: 1.登录服务器,切换到root用户(su - root,然后输入密码,按enter),进入根目录:cd / 2.进入要安装jdk的目录,自己可以创建一个java目录,执行命令如…

Apache的工作原理

Apache的请求处理 尽管不是全部的,但是绝大部分模块都关注处理HTTP请求的某些方面。不过,一个模块不能考虑处理HTTP的所有方面——这是httpd要做的工作。模块化方法的一个好处就是:一个模块可以只关注一个具体的任务,而不去考虑那…

TP框架数据模型

1.TP框架的数据模型需要建在Model文件夹下: 1.数据模型 与控制器相似,但是每个数据模型控制一张数据表。 2.数据模型可写可不写,如果不写 则沿用父类数据模型。 2.访问数据库: 1.更改数据库配置: 2.访问数据库的三种方…

【蓝桥java】递归基础之车辆进出栈

题目: X星球特别讲究秩序,所有道路都是单行线。 一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。 路边有个死胡同,只能容一辆车通过,是临时的检查站&#xff0…

SIP协议的传输层原理报文解析(解读rfc3581)(待排版)

关于rfc3581/rport参数的阐述 一:简述 一般情况下,服务器在接收到request后,应答发向哪里呢?服务器在计算回应应答的算法是一种混合模式,具体说来是这样的: 1,IP:从哪里接收到的就会…

listener.ora、sqlnet.ora、tnsnames.ora 详解

三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora,都是放在$oracle_home\network\admin目录下。 重点:三个文件的作用和使用 sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现…

简单图片放大效果

在今天我创造了一个小的代码段在JQuery,这次是关于图像缩放盘旋,这种特征可能适合一个网络摄影展,现场有许多内容,给一个小快速预览关于该物品。 <!DOCTYPE html><html><head><title>JQuery Zoom Hover</title><meta http-equiv"Content…

使用datatables实现列宽设置、水平滚动条、显示某列部分内容

示例 1、//使用 columnDefs 给列设置宽度 $(#example).DataTable( { "columnDefs": [ //给第一列指定宽度为表格整个宽度的20% { "width": "20%", "targets": 0 } ] } ); //使用 columns 给列设置宽度 $(#example).DataTable( { &q…

使用jvisualvm远程监控tomcat(阿里云ECS)

写在前面&#xff1a; 使用jvisualvm远程监控tomcat(阿里云ECS)&#xff0c;连接是报错&#xff1a;service:jmx:rmi:jndi/rmi:IP:端口// 连接到 IP:端口&#xff0c;网上找了很多资料&#xff0c;未能解决&#xff0c;现已解决&#xff0c;记录下&#xff0c;供参考 本文为本…

【蓝桥java】递归基础之振兴中华

题目&#xff1a; 小明参加了学校的趣味运动会&#xff0c;其中的一个项目是&#xff1a;跳格子。 地上画着一些格子&#xff0c;每个格子里写一个字&#xff0c;如下所示&#xff1a;&#xff08;也可参见下图&#xff09; 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时…

*p++,*(p++),(*p)++,printf过程调用

#include<stdio.h> int main() { printf(); } 答案为D 执行完(*ptr)123;后arr[]{129,7,8,9,10} 执行printf("%d.%d\n",*ptr,*(ptr));时&#xff0c;根据c语言中的函数参数压栈顺序--从右向左&#xff0c;首先计算表达式*(ptr)并将其压入栈中&#xff0c;…

docker实战部署Javaweb项目

一、部署环境说明 docker服务版本&#xff1a;version 18.09.0nginx服务版本&#xff1a;version: nginx/1.15.10redis服务版本&#xff1a;version: redis/5.0.3tomcat服务版本&#xff1a;version: tomcat/8.5.30JDK服务版本&#xff1a;alpine-oraclejdk8 二、安装docker服务…

父子表关联在窗体中的绑定显示和浏览

private BindingManagerBase bm1 null;private BindingManagerBase bm2 null;private void DataScanInForm2_Load(object sender, EventArgs e) {string sqlString1 "select * from 客户";string sqlString2 "select * from 订单";string[] sql…

【Excel】使用Excel函数计算二项分布泊松分布概率

例&#xff1a; 计算如下参数的二项分布和泊松分布 二项分布 1、选中单元框&#xff0c;添加函数 2、选中统计类函数 3、选择二项分布概率函数 4、输入相应的参数 注&#xff1a; &#xff08;1&#xff09;在输入参数时点击相应的单元格即可 &#xff08;2&#xff09;最后…

万能android调用webservice方法——参数类型不受限制

说明&#xff1a;只是个例子&#xff0c;扩展性、复用性不好&#xff0c;只是提出一个思路&#xff0c;返回的XML解析代码写的也很烂聪明的你&#xff0c;拿来代码的时候&#xff0c;肯定能解决这些问题关键代码&#xff1a; try{//发帖机原理&#xff0c;模拟浏览器finalStrin…

Vue轮播图插件---Vue-Awesome-Swiper

轮播图插件 Vue-Awesome-Swiper 地址&#xff1a;https://github.com/surmon-china/vue-awesome-swiper 安装&#xff1a;npm install vue-awesome-swiper --save 局部引入&#xff1a;import swiper/dist/css/swiper.cssimport { swiper, swiperSlide } from vue-awesome-swip…

linux下遇到的小问题与解决方法

Linux下执行.sh脚本错误&#xff1a;bin/sh^M: bad interpreter: No such file or directory 原因是.sh脚本在windows系统下用记事本文件编写的。不同系统的编码格式引起的。 转行文件的编码格式&#xff1a; 1、确保用户对文件有读写及执行权限 oraclelinux-106:~/RMAN/bin&g…

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_05 List集合_1_List集合_介绍常用方法...

有序的&#xff0c;还包含索引&#xff0c;允许有重复的值、 add 打印出来的不是地址&#xff0c;说明重写了toString的方法 remove方法 返回的是被移除的元素 set方法 get 索引越界异常 几种越界的异常转载于:https://www.cnblogs.com/wangjunwei/p/11237813.html

【蓝桥java】进制与整除之天平秤重

题目&#xff1a; 用天平称重时&#xff0c;我们希望用尽可能少的砝码组合称出尽可能多的重量。 如果只有5个砝码&#xff0c;重量分别是1&#xff0c;3&#xff0c;9&#xff0c;27&#xff0c;81 则它们可以组合称出1到121之间任意整数重量&#xff08;砝码允许放在左右两个盘…

分享一个C#使用AT指令控制语音猫的例子

阅读全文&#xff1a;http://www.cckan.net/forum.php?modviewthread&tid61 先来说说 最近公司让开发一个语音猫充值的软件&#xff0c;就是拨打10086&#xff08;虚拟&#xff09;进行话费充值操作&#xff0c;虚拟流程如下&#xff1b; 1.先拨通10086 2.按1进行话费充值…

个人银行账户管理程序

这个程序是一个银行账户管理的程序&#xff0c;是用C来实现程序功能的&#xff0c;该程序包含六个文件&#xff0c;其中有date.h头文件 是日期类的头文件&#xff0c;date.cpp是日期类的实现文件&#xff0c;accumulator.h是按日将数值累加的accumulator类的头文件&#xff0c;…