__init和__exit宏的作用】的更多相关文章

原文地址:http://blog.csdn.net/zhenwenxian/article/details/8564574 内核的部分函数带有__init和__exit宏,负责“初始化”和“清理收尾”该函数.如果该模块被编译进内核,而不是动态加载.宏 __init的使用会在初始化完成后丢弃该函数并收回所占内存, 宏__initdata同__init 类似,只不过对变量有效.简单来说是指示gcc把标记的数据或者函数放到指定sector. linux中把一些启动及初始化时候用的数据用__init标识…
ZZ FROM: http://blog.csdn.net/musein/article/details/742609 ================================================== The __init and __exit declarations are special kernel macros designed to tell the kernel to flag these functions for special handling in ca…
在linux内核中重新定义了printk,如pr_debug,dev_dbg等.要使用这些宏函数就需要定义DEBUG. 详见:kernel printk信息显示级别 那么DEBUG该定义在什么地方呢? 定义到pr_debug或dev_dbg头文件中,则内核所有的宏都起作用.则打印信息太多,不易调试. 理想的宏定义 应该是想打印信息的模块或文件中,那应放到什么位置呢? 最好放到使用文件的最开头 测试用例: //#define DEBUG static inline int poww(int v)…
在C语言#define机制中包括了一个规定,与允许把参数替换到文本中,这种实现通常称为宏或宏定义.下面是宏的声明方式: #define      name(parameter-list)          stuff 其中  parameter-list的左括号必须与name紧邻,如果中间有空白,parameter-list就会被解释为stuff的一部分. 宏的作用 1.替换作用:在程序中使用宏可以进行快速的替换. 2.执行简单的计算使用宏在程序的规模和速度方面都更胜一筹. 3.条件编译:可以通…
看到开放源代码,宏定义经常这样用 #define some() do { do_somt_thing(); } while (0) 为什么这样用? 能够试一下.假如一个普通宏定义 #define some(x) Fun1(x);Fun2(x) if(condition) some(x); 变为 if(condition) Fun1(x); Fun2(x); 这样直接加个花括号不久行了,为什么还用do......while()?假如加上花括号 #define some(x) {Fun1(x);Fu…
在PHP源码中,我们经常会看到很多函数前面有个PHPAPI,但这是什么呢? 于是我在php源码/main/php.h中找到了它的定义 #ifdef PHP_WIN32 # include "tsrm_win32.h" # include "win95nt.h" # ifdef PHP_EXPORTS # define PHPAPI __declspec(dllexport) # else # define PHPAPI __declspec(dllimport) #…
The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define signals or slots 只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制. 比如编写事件接口等程序时,有时会出现如下问题: 在PC端成功编译,但在开发板端却显示错误: QObject::connect: No such slot QWidget::*******(…
1. CC_SYNTHESIZE(int, nTest, Test); 相当于: protected: int nTest; public: virtual nTest getTest(void) const { return nTest; } public: virtual void setTest(int var){ nTest = var; } 2. CC_SAFE_DELETE(p);//安全删除 相当于: do { if(p) { delete (p); (p) = 0; } } wh…
转自:http://blog.csdn.net/joker0910/article/details/7171626 内核使用了大量不同的宏来标记具有不同作用的函数和数据结构.如宏__init .__devinit 等.这些宏在include/linux/init.h 头文件中定义.编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率. 下面是一些常用的宏: ·   __init ,标记内核启动时使用的初始化代码,内核启动完成后不再需要.以此标记的代码位于.init.te…
内核使用了大量不同的宏来标记具有不同作用的函数和数据结构.如宏__init.__devinit等.这些宏在include/linux/init.h头文件中定义.编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率. 下面是一些常用的宏: l  __init 标记内核启动时使用的初始化代码,内核启动完成后不再需要.以此标记的代码位于.init.text内存区域. 它的宏定义是这样的: #define __init __attribute__ ((__section__ (…