Linux内核源码特殊用法

技术文档网 2021-05-08

__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

太常见了,不再赘述

相关文章

  1. Linux iptables学习笔记

    最近工作需要跟firewall打交道,在这里写下自己的使用心得。 firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理 iptables 不管是从

  2. Linux vim命令使用教程

    vim使用 参考链接 vim4种模式: 普通模式 插入模式 可视模式 命令行模式 进入vim,按下i或a进入插入模式 按ESC进入普通模式 在该模式下可以使用方向键 h向左 j向下 k向上

  3. 校准linux系统时间

    服务器的时间对于记录请求和数据库操作时间具有重要意义,对于一些如数据库备份的操作,时间尤为重要,需要避开白天业务繁忙时间进行。 修改时区 # cp /etc/localtime /etc/localt

  4. yum与rpm使用说明

    rpm 命令 rpm 命令是 RPM 软件包的管理工具。 语法 rpm (选项)(参数) 选项 -h:安装时列出标记;-i:安装时显示套件的相关信息;-v:安装时显示指令执行过程;-e:卸载已安

  5. service与chkconfig的替代者systemctl

    在安装 redis 时,看到将 redis 配置成 service 系统服务后,采用 service redisd start 命令启动;在安装 mariadb 时,看到利用 systemctl st

随机推荐

  1. Linux iptables学习笔记

    最近工作需要跟firewall打交道,在这里写下自己的使用心得。 firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理 iptables 不管是从

  2. Linux vim命令使用教程

    vim使用 参考链接 vim4种模式: 普通模式 插入模式 可视模式 命令行模式 进入vim,按下i或a进入插入模式 按ESC进入普通模式 在该模式下可以使用方向键 h向左 j向下 k向上

  3. 校准linux系统时间

    服务器的时间对于记录请求和数据库操作时间具有重要意义,对于一些如数据库备份的操作,时间尤为重要,需要避开白天业务繁忙时间进行。 修改时区 # cp /etc/localtime /etc/localt

  4. yum与rpm使用说明

    rpm 命令 rpm 命令是 RPM 软件包的管理工具。 语法 rpm (选项)(参数) 选项 -h:安装时列出标记;-i:安装时显示套件的相关信息;-v:安装时显示指令执行过程;-e:卸载已安

  5. service与chkconfig的替代者systemctl

    在安装 redis 时,看到将 redis 配置成 service 系统服务后,采用 service redisd start 命令启动;在安装 mariadb 时,看到利用 systemctl st