当前位置: 首页 > news >正文

【C代码】-对齐向上取整的宏

C代码 - 对齐向上取整的宏

概述

底层编程(尤其是 C/C++ 驱动开发、内存管理)中极其经典的对齐向上取整(Alignment Up)算法。

#define ALIGN_UP(s, a) (((s) + (a) - 1) & ~((a) - 1))
  • 注意: 这个宏生效的前提是 a 必须是 2 的幂。如果 a = 3 或 a = 10,这个位运算逻辑就会失效。

使用举例1 - 4字节对齐

#include <stdio.h>
#include <stdint.h>/*** 底层编程(尤其是 C/C++ 驱动开发、内存管理)中极其经典的**对齐向上取整(Alignment Up)**算法* 功能是:如果输入的 s 不是 a 的整数倍,则将 s 增加到下一个最近的 a 的整数倍;如果已经是整数倍,则保持不变。* 注意: 这个宏生效的前提是 a 必须是 2 的幂。如果 a = 3 或 a = 10,这个位运算逻辑就会失效。*/
#define ALIGN_UP(s, a) (((s) + (a) - 1) & ~((a) - 1))#define DF_ALIGN_SIZE 4int main(void) {printf("========== C Test! ========== \n\n");for(int i=0;i<34;i++){uint32_t base_payload_off = ALIGN_UP(i, DF_ALIGN_SIZE);printf("%d base_payload_off = %d \n",i,base_payload_off);}return 0;
}

运行结果:

========== C Test! ==========0 base_payload_off = 0
1 base_payload_off = 4
2 base_payload_off = 4
3 base_payload_off = 4
4 base_payload_off = 4
5 base_payload_off = 8
6 base_payload_off = 8
7 base_payload_off = 8
8 base_payload_off = 8
9 base_payload_off = 12
10 base_payload_off = 12
11 base_payload_off = 12
12 base_payload_off = 12
13 base_payload_off = 16
14 base_payload_off = 16
15 base_payload_off = 16
16 base_payload_off = 16
17 base_payload_off = 20
18 base_payload_off = 20
19 base_payload_off = 20
20 base_payload_off = 20
21 base_payload_off = 24
22 base_payload_off = 24
23 base_payload_off = 24
24 base_payload_off = 24
25 base_payload_off = 28
26 base_payload_off = 28
27 base_payload_off = 28
28 base_payload_off = 28
29 base_payload_off = 32
30 base_payload_off = 32
31 base_payload_off = 32
32 base_payload_off = 32
33 base_payload_off = 36

使用举例2 - 16字节对齐

#include <stdio.h>
#include <stdint.h>/*** 底层编程(尤其是 C/C++ 驱动开发、内存管理)中极其经典的**对齐向上取整(Alignment Up)**算法* 功能是:如果输入的 s 不是 a 的整数倍,则将 s 增加到下一个最近的 a 的整数倍;如果已经是整数倍,则保持不变。* 注意: 这个宏生效的前提是 a 必须是 2 的幂。如果 a = 3 或 a = 10,这个位运算逻辑就会失效。*/
#define ALIGN_UP(s, a) (((s) + (a) - 1) & ~((a) - 1))#define DF_ALIGN_SIZE 16int main(void) {printf("========== C Test! ========== \n\n");for(int i=0;i<34;i++){uint32_t base_payload_off = ALIGN_UP(i, DF_ALIGN_SIZE);printf("%d base_payload_off = %d \n",i,base_payload_off);}return 0;
}

运行输出结果:

========== C Test! ==========0 base_payload_off = 0
1 base_payload_off = 16
2 base_payload_off = 16
3 base_payload_off = 16
4 base_payload_off = 16
5 base_payload_off = 16
6 base_payload_off = 16
7 base_payload_off = 16
8 base_payload_off = 16
9 base_payload_off = 16
10 base_payload_off = 16
11 base_payload_off = 16
12 base_payload_off = 16
13 base_payload_off = 16
14 base_payload_off = 16
15 base_payload_off = 16
16 base_payload_off = 16
17 base_payload_off = 32
18 base_payload_off = 32
19 base_payload_off = 32
20 base_payload_off = 32
21 base_payload_off = 32
22 base_payload_off = 32
23 base_payload_off = 32
24 base_payload_off = 32
25 base_payload_off = 32
26 base_payload_off = 32
27 base_payload_off = 32
28 base_payload_off = 32
29 base_payload_off = 32
30 base_payload_off = 32
31 base_payload_off = 32
32 base_payload_off = 32
33 base_payload_off = 48
http://www.jsqmd.com/news/420286/

相关文章:

  • 2月11
  • 2月17
  • 2月12
  • 2026年天津自媒体运营推广公司TOP5推荐榜单发布 - 精选优质企业推荐榜
  • 教你轻松处理闲置沃尔玛卡,变现超简单! - 团团收购物卡回收
  • 2026年嘉兴自媒体运营推广公司推荐榜单TOP5发布 - 精选优质企业推荐榜
  • 沃尔玛购物卡闲置不用?小白也能上手的正确处理全攻略 - 团团收购物卡回收
  • 2026年长春自媒体运营推广公司排行榜发布 - 精选优质企业推荐榜
  • 2026年嘉兴自媒体运营推广公司排行榜公布 - 精选优质企业推荐榜
  • 网络型(TCP/UDP)和应用型(HTTP/HTTPS)有什么不同
  • 2月13
  • 微信立减金闲置处理避坑指南 绝大多数人都踩过的隐形雷区 - 团团收购物卡回收
  • 2026年浙江自媒体运营推广公司排行榜发布 - 精选优质企业推荐榜
  • 手写 bitset
  • 2月18
  • 2026年比较好的火锅豆皮机/小型豆皮机厂家热卖产品推荐(近期) - 行业平台推荐
  • 2月14
  • 2026年2月防火玻璃隔断厂商推荐,甲级防火认证与安全标准测评 - 品牌鉴赏师
  • 《禅与摩托车维修艺术》读后感
  • 2026年GEO优化服务商解析:聚焦成效,解锁AI搜索增长新可能 - 品牌测评鉴赏家
  • 2月15
  • 2026年杭州植物租赁服务推荐榜:办公室、园区、小区室内绿植租摆,专业养护与创意设计口碑之选 - 品牌企业推荐师(官方)
  • 1月18
  • 2月19
  • 2026年烟台自媒体运营推广公司TOP5推荐榜单发布 - 精选优质企业推荐榜
  • Cursor 使用技巧
  • 2月1
  • 北京智慧星光信息技术股份有限公司联系方式:企业服务热线与官网信息 - 十大品牌推荐
  • 提问的智慧
  • 2月2