关于宏的一个应用
来源:互联网 发布:脑力影像网络训练 编辑:程序博客网 时间:2024/05/02 02:58
在内核文件sched.c中有这样的应用,记录如下:
#define SCHED_FEAT(name, enabled) /
__SCHED_FEAT_##name ,
enum {
#include "sched_features.h"
};
#undef SCHED_FEAT
#define SCHED_FEAT(name, enabled) /
(1UL << __SCHED_FEAT_##name) * enabled |
const_debug unsigned int sysctl_sched_features =
#include "sched_features.h"
0;
其中sched_features.h文件中内容如下,为了看着方便,去掉其中的注释:
SCHED_FEAT(FAIR_SLEEPERS, 1)
SCHED_FEAT(GENTLE_FAIR_SLEEPERS, 1)
SCHED_FEAT(NORMALIZED_SLEEPER, 0)
SCHED_FEAT(START_DEBIT, 1)
SCHED_FEAT(WAKEUP_PREEMPT, 1)
SCHED_FEAT(ADAPTIVE_GRAN, 1)
SCHED_FEAT(ASYM_GRAN, 1)
SCHED_FEAT(WAKEUP_SYNC, 0)
SCHED_FEAT(WAKEUP_OVERLAP, 0)
SCHED_FEAT(WAKEUP_RUNNING, 0)
SCHED_FEAT(SYNC_WAKEUPS, 1)
SCHED_FEAT(AFFINE_WAKEUPS, 1)
SCHED_FEAT(SYNC_LESS, 1)
SCHED_FEAT(SYNC_MORE, 0)
SCHED_FEAT(NEXT_BUDDY, 0)
SCHED_FEAT(LAST_BUDDY, 1)
SCHED_FEAT(CACHE_HOT_BUDDY, 1)
SCHED_FEAT(ARCH_POWER, 0)
SCHED_FEAT(HRTICK, 0)
SCHED_FEAT(DOUBLE_TICK, 0)
SCHED_FEAT(LB_BIAS, 1)
SCHED_FEAT(LB_SHARES_UPDATE, 1)
SCHED_FEAT(ASYM_EFF_LOAD, 1)
SCHED_FEAT(OWNER_SPIN, 1)
这个宏替换之后会是神马样子呢?编了一个小文件main.c, 用gcc -E main.c > main.txt 看了一下, 以下是main.txt中内容
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
enum{
# 1 "sched_features.h" 1
__SCHED_FEAT_FAIR_SLEEPERS,
__SCHED_FEAT_GENTLE_FAIR_SLEEPERS,
__SCHED_FEAT_NORMALIZED_SLEEPER,
__SCHED_FEAT_START_DEBIT,
__SCHED_FEAT_WAKEUP_PREEMPT,
__SCHED_FEAT_ADAPTIVE_GRAN,
__SCHED_FEAT_ASYM_GRAN,
__SCHED_FEAT_WAKEUP_SYNC,
__SCHED_FEAT_WAKEUP_OVERLAP,
__SCHED_FEAT_WAKEUP_RUNNING,
__SCHED_FEAT_SYNC_WAKEUPS,
__SCHED_FEAT_AFFINE_WAKEUPS,
__SCHED_FEAT_SYNC_LESS,
__SCHED_FEAT_SYNC_MORE,
__SCHED_FEAT_NEXT_BUDDY,
__SCHED_FEAT_LAST_BUDDY,
__SCHED_FEAT_CACHE_HOT_BUDDY,
__SCHED_FEAT_ARCH_POWER,
__SCHED_FEAT_HRTICK,
__SCHED_FEAT_DOUBLE_TICK,
__SCHED_FEAT_LB_BIAS,
__SCHED_FEAT_LB_SHARES_UPDATE,
__SCHED_FEAT_ASYM_EFF_LOAD,
__SCHED_FEAT_OWNER_SPIN,
# 7 "main.c" 2
};
unsigned int sysctl_sched_features =
# 1 "sched_features.h" 1
(1UL << __SCHED_FEAT_FAIR_SLEEPERS) * 1 |
(1UL << __SCHED_FEAT_GENTLE_FAIR_SLEEPERS) * 1 |
(1UL << __SCHED_FEAT_NORMALIZED_SLEEPER) * 0 |
(1UL << __SCHED_FEAT_START_DEBIT) * 1 |
(1UL << __SCHED_FEAT_WAKEUP_PREEMPT) * 1 |
(1UL << __SCHED_FEAT_ADAPTIVE_GRAN) * 1 |
(1UL << __SCHED_FEAT_ASYM_GRAN) * 1 |
(1UL << __SCHED_FEAT_WAKEUP_SYNC) * 0 |
(1UL << __SCHED_FEAT_WAKEUP_OVERLAP) * 0 |
(1UL << __SCHED_FEAT_WAKEUP_RUNNING) * 0 |
(1UL << __SCHED_FEAT_SYNC_WAKEUPS) * 1 |
(1UL << __SCHED_FEAT_AFFINE_WAKEUPS) * 1 |
(1UL << __SCHED_FEAT_SYNC_LESS) * 1 |
(1UL << __SCHED_FEAT_SYNC_MORE) * 0 |
(1UL << __SCHED_FEAT_NEXT_BUDDY) * 0 |
(1UL << __SCHED_FEAT_LAST_BUDDY) * 1 |
(1UL << __SCHED_FEAT_CACHE_HOT_BUDDY) * 1 |
(1UL << __SCHED_FEAT_ARCH_POWER) * 0 |
(1UL << __SCHED_FEAT_HRTICK) * 0 |
(1UL << __SCHED_FEAT_DOUBLE_TICK) * 0 |
(1UL << __SCHED_FEAT_LB_BIAS) * 1 |
(1UL << __SCHED_FEAT_LB_SHARES_UPDATE) * 1 |
(1UL << __SCHED_FEAT_ASYM_EFF_LOAD) * 1 |
(1UL << __SCHED_FEAT_OWNER_SPIN) * 1 |
# 16 "main.c" 2
0;
int main(int argc, char **argv)
{
return 0;
}
- 关于宏的一个应用
- 关于Graphics的一个应用实例
- 一个经典的关于异常处理应用
- 关于servlet的一个简单应用
- 关于Swing 包的一个简单应用
- 关于一个JS加法函数的应用
- 从一个帖子引起的,关于Apply的应用
- 一个关于时间的静态变量的应用
- 关于一个简易的新闻应用的感悟
- NSScanner 应用(关于一个URL.query)处理成一个字典的应用
- 关于一个应用进程打开另外一个应用进程的TASK和PROCESS 说明
- 一个关于在VB.NET中应用超级解霸的问题
- 一个关于confirm与标记结合的应用
- 关于一个服务上面多个应用的场景
- 一个关于iphone应用邮件功能的问题
- 关于JAVA反射应用容易出现的一个隐性错误:
- 关于Ajax控件中的AutoCompleteExtender控件的一个简单应用
- awk中一个关于NR和FNR的应用
- 第7章 委托和事件
- Ecplise中常用快捷键
- 如何更改myeclipse的workspace空间?
- 前缀、中缀、后缀表达式
- QR码生成原理(一)
- 关于宏的一个应用
- WebService编程:1. Axis; 2. Axis2; 3. Apache CXF
- 理解参数
- struts文件上传,获取文件信息
- android: 通过AIDL使用SERVICE
- Spring scope属性详解
- MSSql DBA 日常巡检手册
- .NET种Json时对单引号和特殊字符串的处理
- Ogre源码剖析 - 场景管理之Octree