`
ah_fu
  • 浏览: 227892 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C++学习:驱动代码里发现的一个小技巧,求大于I的最小的SIZE倍的值

阅读更多
    最近在研究驱动的代码,发现这样一个宏,没太搞懂什么用途:
#define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1)))
   调用的时候是这样的:
   unsigned int i = 4097;
   E1000_ROUNDUP(i, 4096);

   拆解这个运算,还是没明白到底要干什么:简化的表达式相当于:
       i = (i + 0x00000fff) | 0xfffff000;

   执行一下才知道,原来是将这个值变成一个页大小(4096字节)的倍数。也就是说,这个宏的作用是求大于i的最小倍数size的值。(注意SIZE要是2的倍数才行)

    如果这种代码给我这种低手写,我会怎么写呢?
   i = (0==i%size)? i : (i/size+1)*size;

   惭愧啊,离散数学没学好,多看内核,真的收益很多啊!

  
 
分享到:
评论

相关推荐

    VC学习教程<易学C++>

    **2.1 如何创建一个示例程序** - **环境设置**:安装Visual C++ IDE。 - **新建项目**:选择“控制台应用程序”模板。 - **编写代码**:实现简单的输出功能。 **2.2 创建自己的Hello, World** - **代码结构**:`#...

    C++教程网视频:linux网络编程

    - **五种I/O模型**:阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O、异步I/O。 - **select**:监视多个文件描述符的状态变化。 - **用select改进回射客户端程序**:使客户端能够同时处理多个连接。 ##### socket...

    蓝桥杯c++-蓝桥杯竞赛练习之基础练习题数列排序.zip

    4. 快速排序:使用分治策略,选取一个基准值,将数组分为两部分,小于基准值的放在左边,大于的放在右边,然后递归地对左右两边进行快速排序。 5. 归并排序:同样是分治法,将数列分为两半,分别排序后再合并。 6....

    vc++ 开发实例源码包

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...

    C++简单算法(排序等)

    3. 选择排序:选择排序每次从未排序的元素中找到最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。尽管它的时间复杂度在所有情况下都是平方级,但其交换次数较少,有时在实际应用中...

    vc++ 应用源码包_6

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    质数产生器

    标题中的“质数产生器”指的是一个程序,其主要功能是生成大于或等于特定基数的最小质数。BCB(Borland C++ Builder)是一种集成开发环境,它基于C++语言并提供可视化组件来构建Windows应用程序。描述中提到这个质数...

    网管教程 从入门到精通软件篇.txt

    INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 ...

    ACMer 要学的知识

    Hoare提出的分治策略,通过选取一个基准元素,将数组分为两部分,左边元素小于基准,右边元素大于基准,然后对两部分递归进行排序。 2. **堆排序**:基于完全二叉树的堆数据结构,通过构建大顶堆或小顶堆实现排序。...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    motorola面试题目(英文)

    - 拷贝构造函数用于创建一个新对象作为另一个对象的副本,而赋值运算符用于修改一个现有对象的状态,使其与另一个对象相等。 - 拷贝构造函数在创建新对象时被调用,赋值运算符在对象已经存在的情况下被调用。 - 对于...

    vc++ 应用源码包_5

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    华为编程开发规范与案例

    经过跟踪变量值发现循环变量i的阀值pSysHead-&gt;dbf_count的数值为0xFFFFFFFF,该值是从被破坏的内存数据库中获取的,正常情况下该值小于127。而pDBFat是数据库的起始地址,如果pSysHead-&gt;dbf_count值异常过大,将...

    8-12腾讯二面答案.docx

    选取一个基准元素,将数组分为小于和大于基准的两部分,然后递归地对这两部分进行快速排序。 在面试中,除了上述理论知识,候选人还需要展示自己的项目经验,特别是如何利用这些知识来解决实际问题。在腾讯的面试中...

    嵌入式Linux面试必备

    - **大小端问题**:通过联合体可以判断系统是大端还是小端,例如一个包含int和char的union,如果char在前,那么读取union的值就可以知道字节顺序。 - **大小端转换**:在不同的字节序系统之间传递数据时,需要进行...

    vc++ 应用源码包_1

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_2

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    PCommPro在RS485串口通讯中的应用.pdf

    - **命令格式**:对于每个终端设备,必须有一个唯一的站号或地址号。 - **数据格式**:如传输速率9600bps、数据长度8位、1位停止位、奇校验等。 **示例**: ```vb ' 发送数据 Ret = Sio_Write(Port, "Command...

    vc++ 应用源码包_3

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

Global site tag (gtag.js) - Google Analytics