Linux内核源码特殊用法
__attribute__
GCC扩展语法
例如:
struct __attribute__((aligned(4)) sample_struct {
...
}
多个属性可以使用“,”隔开
aligned:设置数据对齐
packed:设置结构体按最小大小排列成员
noreturn:函数无返回
pure:函数不修改任何全局变量
const:函数不读/写任何全局变量
noinline:不能扩展为内联函数
unused:表示该函数或者变量可能不使用
used:与上相反
alias:别名(针对函数)
deprecated:表示弃用,会使编译器产生warning信息
指定以上属性,可以方便编译器对其进行优化
关键字替代
__asm__与asm
__inline__与inline
__typeof__与typefo
等
编译时若开启-std和-ansi,则后者不能使用,前者仍能使用
参数传递
asmlinkage
在本地堆栈中传递参数
fastcall
在通用寄存器中传递参数
例:
fastcall unsigned long func(){
...
}
UL
即为unsigned long
,放在一个常数后面,告诉编译器如何处理该常数,避免溢出
例:
#define MASK 0x99fffffffcccccUL
volatile
每次访问时,该变量必须重新加载,而不是从缓存中读取,在处理中断寄存器或多进程时使用
例:
volatile int a;
likely和unlikely
太常见了,不再赘述
相关文章
- Linux iptables学习笔记
最近工作需要跟firewall打交道,在这里写下自己的使用心得。 firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理 iptables 不管是从
- Linux vim命令使用教程
vim使用 参考链接 vim4种模式: 普通模式 插入模式 可视模式 命令行模式 进入vim,按下i或a进入插入模式 按ESC进入普通模式 在该模式下可以使用方向键 h向左 j向下 k向上
- 校准linux系统时间
服务器的时间对于记录请求和数据库操作时间具有重要意义,对于一些如数据库备份的操作,时间尤为重要,需要避开白天业务繁忙时间进行。 修改时区 # cp /etc/localtime /etc/localt
- yum与rpm使用说明
rpm 命令 rpm 命令是 RPM 软件包的管理工具。 语法 rpm (选项)(参数) 选项 -h:安装时列出标记;-i:安装时显示套件的相关信息;-v:安装时显示指令执行过程;-e:卸载已安
- service与chkconfig的替代者systemctl
在安装 redis 时,看到将 redis 配置成 service 系统服务后,采用 service redisd start 命令启动;在安装 mariadb 时,看到利用 systemctl st
随机推荐
- Linux iptables学习笔记
最近工作需要跟firewall打交道,在这里写下自己的使用心得。 firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理 iptables 不管是从
- Linux vim命令使用教程
vim使用 参考链接 vim4种模式: 普通模式 插入模式 可视模式 命令行模式 进入vim,按下i或a进入插入模式 按ESC进入普通模式 在该模式下可以使用方向键 h向左 j向下 k向上
- 校准linux系统时间
服务器的时间对于记录请求和数据库操作时间具有重要意义,对于一些如数据库备份的操作,时间尤为重要,需要避开白天业务繁忙时间进行。 修改时区 # cp /etc/localtime /etc/localt
- yum与rpm使用说明
rpm 命令 rpm 命令是 RPM 软件包的管理工具。 语法 rpm (选项)(参数) 选项 -h:安装时列出标记;-i:安装时显示套件的相关信息;-v:安装时显示指令执行过程;-e:卸载已安
- service与chkconfig的替代者systemctl
在安装 redis 时,看到将 redis 配置成 service 系统服务后,采用 service redisd start 命令启动;在安装 mariadb 时,看到利用 systemctl st