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

【ARM 嵌入式 C 入门及渐进 1.2 -- 是否为 n 字节对齐】

文章目录

    • 是否为 n 字节对齐

是否为 n 字节对齐

在C语言中,你可以定义一个宏来检查一个给定地址是否是n字节对齐的。这里的n应该是2的幂(例如,2、4、8、16等)。要做到这一点,可以利用位操作的特性。具体地,如果一个地址与n-1进行位与操作的结果为0,则该地址是n字节对齐的。
下面是如何实现这个宏的示例:

#include <stdio.h>
#include <stdint.h>// 定义一个宏,用于检查ptr是否为n字节对齐
// ptr为需要检查的地址,n为对齐的字节数,必须是2的幂
#define IS_ALIGNED(ptr, n) (!((uintptr_t)(ptr) & ((n) - 1)))int main(void) 
{int x;double y;void *p1 = &x; // int类型的变量地址void *p2 = &y; // double类型的变量地址void *p3 = (void*)0x1005; // 假设的非对齐地址,仅作为示例// 检查是否为4字节对齐printf("p1 is %saligned to 4 bytes.\n", IS_ALIGNED(p1, 4) ? "" : "not ");// 检查是否为8字节对齐printf("p2 is %saligned to 8 bytes.\n", IS_ALIGNED(p2, 8) ? "" : "not ");// 检查0x1005地址是否为4字节对齐printf("p3 is %saligned to 4 bytes.\n", IS_ALIGNED(p3, 4) ? "" : "not ");return 0;
}

在这个示例中:

  • IS_ALIGNED宏接收两个参数:ptrnptr是需要检查对齐的指针,而n是对齐的字节大小,必须是2的幂。
  • 宏使用了uintptr_t类型来确保指针能够被安全地转换为整数,这样就可以进行位操作。uintptr_t定义在<stdint.h>头文件中。
  • 如果ptrn-1的位与结果为0,那么宏返回真(即,ptrn字节对齐的),否则返回假。

这个宏非常通用,可以用于检查任何地址是否为2的幂字节对齐。

http://www.lryc.cn/news/346701.html

相关文章:

  • 适配qnx和linux平台的线程管理类封装
  • 【信息系统项目管理师】复习~第十五章
  • ARM单片机实现流水灯(GD32)
  • 操作系统基础之磁盘
  • 【Unity Shader入门精要 第6章】基础光照(一)
  • JavaEE概述 + Maven
  • python把png转成jpg
  • 信息系统架构基本概念及发展_2.信息系统架构的定义
  • ctfshow SSRF 351-358
  • 优化学习方法,事半功倍
  • Spring STOMP-开启STOMP
  • Python 开发 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)
  • 《Python编程从入门到实践》day25
  • Unity 性能优化之光照优化(七)
  • C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形
  • AI办公自动化-用kimi批量重命名Word文档
  • Golang 并发 Mutex 互斥锁的使用
  • 20232906 2023-2024-2 《网络与系统攻防技术》第九次作业
  • 常见的十二种软件架构
  • 数据库出现死锁的解决方法参考
  • HCIP-Datacom-ARST自选题库_01_防火墙【6道题】
  • 力扣/leetcode383.比特位记数
  • react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)
  • Excel 分组汇总后删除明细
  • docker runc升级1.1.12
  • C++接口:构建模块化与可扩展的软件架构
  • 【讲解下目标追踪】
  • 实时Linux对EtherCAT工业自动化协议的支持
  • ViLT 浅析
  • 7-117 死亡隧道