CANN Runtime编码规范
编码规范【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本文档定义 Runtime 仓代码实现时应遵守的统一编码规范。文档结构一、通用 C/C 编码规范适用于 Runtime 仓的所有 C/C 代码包括源码和 UT 代码。二、Runtime 约束性规范主要适用于src/、include/、pkg_inc/、cmake/及其他非测试代码审查或编写 UT 代码时只在确实涉及相关场景时参考。一、通用 C/C 编码规范规则 1禁止硬编码敏感信息、使用禁用敏感词源码中禁止硬编码明文密码、密钥等高级别敏感数据。需要彻底清理历史遗留的废弃账号、密码和用途不明的敏感配置。用途不明、语义含糊的大数组或可读性差的隐藏数据定义容易被质疑为后门实现应避免。代码或者配置中硬编码公网 IP、域名、邮箱地址以及容易引起误解的敏感词时必须能说明合理用途尤其不能出现指向华为或中国的可疑公网地址。规则 2外部数据作为数组索引或者指针偏移时必须确保访问范围合法数组索引、内存偏移、长度和容量若直接由外部控制必须先做严格范围校验防止越界访问。规则 3整数之间运算时必须严格检查确保不会出现溢出、反转、除 0若整数运算结果会参与内存申请、偏移计算、循环边界或拷贝长度必须评估溢出、反转、截断和除零风险。规则 4资源管理和生命周期必须清晰获取与释放必须成对文件句柄、内存以及 device、driver、context、stream、event、notify 等句柄都必须在生命周期结束后及时释放。异常分支和早返回路径不能遗漏清理动作。资源释放后应立即赋予明确新值避免悬空指针和重复释放。内存、锁、句柄等资源的获取与释放必须成对出现优先使用 RAII 管理资源生命周期。规则 5内存申请前必须判断大小申请后必须校验是否成功申请大小可能来自外部输入必须检查合法性不能申请 0 长度内存。外置 allocator 需要同时校验返回的结构体指针以及结构体内部data指针是否有效。内存申请后应评估是否需要初始化避免读取未初始化内存。规则 6外部输入、空指针、数组下标和循环边界必须先校验用户参数、driver 返回值、配置文件、环境变量等外部输入进入关键逻辑前都必须完成合法性校验。解引用前必须确认指针有效。数组下标、长度和循环边界必须位于合法范围内。规则 7错误处理必须完整禁止吞错调用链上的错误返回值必须被正确传播不能静默吞掉错误。返回的错误码必须语义准确。错误路径上已经申请的资源必须同步释放。错误处理宏必须使用正确避免出现“记录了日志但没有收口”或“直接返回但缺少上下文”的情况。规则 8缓冲区、内存操作和对象生命周期必须满足基础安全约束数组或缓冲区访问必须避免越界。new/delete、malloc/free、new[]/delete[]必须严格配对禁止混用。使用new(std::nothrow)时必须判空使用普通new时不要再做nullptr判空。禁止返回栈空间地址。释放对象前应明确对象内部成员指针的处理策略避免二次释放或悬空引用。规则 9并发场景必须显式保证线程安全多线程场景下的共享数据必须有明确保护策略避免竞态和可见性问题。普通锁禁止随意嵌套避免死锁风险。涉及线程上下文切换、异步任务或回调时必须明确时序关系和资源有效期。规则 10不要编写依赖表达式求值顺序或隐式优先级的代码类似func(a, a)的写法会依赖未指定的求值顺序属于未定义行为必须避免。复杂表达式应使用括号明确运算优先级避免依赖默认优先顺序。规则 11代码风格和提交内容必须保持整洁一致变更代码必须符合仓库.clang-format配置。命名必须符合项目惯例函数名使用大驼峰私有方法允许尾部下划线变量名使用小驼峰常量和宏使用全大写下划线类名使用大驼峰。新文件必须包含华为 CANN Open Software License 版权头。include 顺序必须符合项目惯例。提交中不得残留调试代码、注释掉的代码、未使用的 include 或变量。新增文件权限必须合理源码应为 644可执行脚本应为 755。二、Runtime 约束性规范规则 12对外开放接口的预留参数要有严格校验防止后续版本启用时出现兼容性问题预留参数必须强制用户传入无效值否则后续启用时容易引入兼容性问题。数值类预留参数的无效值一般为0。指针类预留参数的无效值一般为nullptr。规则 13对外接口中表达内存长度的返回值或参数应优先使用size_t涉及内存长度、缓冲区大小、字节数等语义时应优先使用size_t避免 32 位长度表达不足的问题。规则 14修改对外开放接口时必须严格确保 API 和 ABI 兼容include/、include/external/acl/和对外发布头文件边界上的修改都必须严格评估 API/ABI 兼容性。对外头文件的公开接口中禁止使用std::string作为 ABI 边界类型应使用仓内兼容替代方案。新增或修改结构体时要考虑保留字段和后向兼容。废弃接口应优先做兼容标记而不是直接删除。规则 15禁止在公共路径中硬编码芯片、平台或驱动能力分支公共逻辑应优先通过能力查询、配置注册或平台隔离目录处理差异。确需区分平台的逻辑应收敛在config/、平台子目录或明确的能力适配层中。规则 16禁止在加载/执行热路径中随意增加 EVENT/TRACE 打印热路径海量日志会引入明显性能抖动和 IO 压力。加载/执行热路径中禁止新增默认开启的 EVENT/TRACE 级别日志。可以增加默认关闭的 DEBUG/INFO 日志但需要评估开关策略和字符串开销。ERROR 日志仅用于真实异常不可用于正常分支。规则 17调用其他组件提供的、需要 Runtime 传入资源的接口时必须提前确认资源生命周期约束设计和编码阶段都要明确跨组件接口是否持有传入指针、何时复用、何时释放。规则 18对执行顺序敏感的逻辑禁止依赖无序容器遍历结果如果容器遍历顺序会影响任务、事件、通知、回调注册或资源初始化顺序禁止直接依赖std::unordered_map等无序容器的遍历结果。需要稳定顺序时优先使用有序容器或显式排序。不要使用进程内地址值作为顺序依据。规则 19禁止单例模式在头文件中以内联方式实现头文件内联单例在多编译单元、动态库和dlopen场景下可能带来多实例、析构时序和崩溃问题。规则 20禁止新增未公开的对外接口边界新增对外接口时只能放在明确的公开边界头文件中不要通过内部头文件或内部符号对外泄露能力。规则 21禁止在静态对象或全局对象析构函数里做跨 SO 的函数调用跨动态库析构顺序不可预测极易导致悬空引用、异常终止和崩溃。典型风险包括依赖的 SO 已卸载shared_ptr析构触发虚析构函数但实际类型所在 SO 已失效程序退出阶段其他线程仍在访问静态对象。推荐做法是把清理工作放到显式的Finalize()或等价接口中在运行期完成清理析构阶段保持空操作或仅做本地对象回收。规则 22实现逻辑必须与设计和接口约束保持一致编码前应明确变更对应的设计意图、接口约束和场景预期。实现中不得遗漏分支、边界条件或异常路径。正常流程、异常流程和边界场景的处理方式必须保持一致。规则 23编写日志时必须保证级别、内容和热路径开销合理RT_LOG_ERROR仅用于不可恢复错误RT_LOG_WARNING用于功能降级或非致命异常RT_LOG_INFO用于关键操作节点RT_LOG_DEBUG用于调试信息。日志内容必须包含足够上下文并避免打印敏感信息。格式化字符串必须与参数类型匹配。日志内容中不得硬编码函数名不得出现英文拼写错误。热路径不得引入高频日志。项目内错误日志宏必须使用正确例如COND_RETURN_ERROR_MSG_INNER、RecordErrorLog等。规则 24修改公共接口时必须同步满足兼容性要求修改include/目录下头文件时必须按向后兼容原则设计变更。公共 API 函数签名不得发生 breaking change除非该变更已被明确接受并完成迁移设计。接口废弃应通过标记完成而不是直接删除。枚举定义不得随意引入XX_MAX或影响多版本匹配兼容性。pkg_inc/runtime/runtime不得误新增内容确需新增时必须先确认是否应改为其它公开边界。规则 25修改公开接口和错误码时必须同步更新文档修改include/external/acl/acl_rt.h时必须在同一次变更中同步更新对应docs/文档。修改include/external/acl/error_codes/rt_error_codes.h时必须在同一次变更中同步更新docs/zh/api_ref/25_data_types_and_operation_APIs.md。规则 26实现时必须遵守既有软件架构和构建边界src/runtime中非api目录不应调用api目录的方法例如feature目录不应访问Api::Instance。编写实现时必须保持既有目录边界、平台隔离边界和组件职责边界清晰。src/runtime目录仅允许使用STATIC_RT_LIB、RUNTIME_API、CFG_DEV_PLATFORM_PC及编译器内置宏禁止新增其他编译宏。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

豆包、DeepSeek、千问搜索推荐怎么做?GEO工具选型推

豆包、DeepSeek、千问搜索推荐怎么做?GEO工具选型推

2026年的企业获客,绕不开一个扎心的问题:你的客户已经不怎么用百度搜关键词了——他们直接问AI。据IDC数据,2026年全球GEO市场规模预计达到220亿美元,中国市场份额超过50%。豆包月活3.45亿、DeepSeek月活1.27亿、通义千问月活1.66…

2026/7/11 17:15:19阅读更多 →
AD7175-8与PIC18F47K40在精密信号采集中的优化实践

AD7175-8与PIC18F47K40在精密信号采集中的优化实践

1. 为什么选择AD7175-8与PIC18F47K40组合?在工业测量和精密仪器领域,信号采集系统的性能直接决定了最终数据的可靠性。AD7175-8作为ADI公司推出的24位Σ-Δ型ADC,其核心优势在于50kSPS采样率下的超低噪声表现(2.5μV rms&#xff…

2026/7/11 17:15:19阅读更多 →
TypeScript社区资源大全:问题管理、贡献与支持指南

TypeScript社区资源大全:问题管理、贡献与支持指南

TypeScript社区资源大全:问题管理、贡献与支持指南 【免费下载链接】TypeScript-wiki A repository to make changes to the TypeScript Wiki on GitHub 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScript-wiki TypeScript作为一门强类型的JavaScript…

2026/7/11 17:15:19阅读更多 →
SAP 资产会计配置实战:5步解决折旧表分配与公司代码报错

SAP 资产会计配置实战:5步解决折旧表分配与公司代码报错

SAP资产会计配置实战:从折旧表分配到公司代码报错的深度解析在SAP资产会计(FI-AA)模块的实施过程中,折旧表分配与公司代码配置是基础但极易出错的关键环节。许多顾问在完成这些配置后,常会遇到"公司代码分录不完全…

2026/7/11 18:15:23阅读更多 →
致动终传JS13 Pro手柄DS输入模式深度配置与实战指南

致动终传JS13 Pro手柄DS输入模式深度配置与实战指南

最近在折腾游戏手柄时,发现一个很有意思的现象:很多玩家都在讨论致动终传JS13 Pro这款手柄的DS输入功能到底"好锁"在哪里。作为一个长期关注外设体验的技术爱好者,我决定深入测试一下这款手柄的真实表现。所谓"好锁"&…

2026/7/11 18:15:23阅读更多 →
Typora插件如何实现PDF批量导出与自定义导出功能:终极解决方案

Typora插件如何实现PDF批量导出与自定义导出功能:终极解决方案

Typora插件如何实现PDF批量导出与自定义导出功能:终极解决方案 【免费下载链接】typora_plugin Typora Plugin. Feature Enhancement Tool | Typora 插件,功能增强工具 项目地址: https://gitcode.com/gh_mirrors/ty/typora_plugin 作为一款广受欢…

2026/7/11 18:15:23阅读更多 →
GLM-5V-Turbo:前端工程中的像素级视觉接口层

GLM-5V-Turbo:前端工程中的像素级视觉接口层

1. 项目概述:这不是一个“升级版”,而是一次定位重构的实战手记GLM-5V-Turbo上线那天,我盯着智普官网的公告刷新了三遍,不是因为激动,而是因为困惑——它到底想解决什么问题?不是单纯比谁快、谁参数多、谁上…

2026/7/11 18:15:23阅读更多 →
TLA2518与PIC18F26K20构建高精度多通道ADC系统

TLA2518与PIC18F26K20构建高精度多通道ADC系统

1. 项目背景与核心需求在工业控制、医疗设备和消费电子等领域,模拟信号到数字信号的可靠转换一直是系统设计的关键环节。TLA2518作为德州仪器推出的12位精度、1MSPS采样率的8通道ADC芯片,配合PIC18F26K20这款高性价比的8位MCU,能够构建一个稳…

2026/7/11 18:15:22阅读更多 →
工业控制系统中电气隔离与TLP241A光耦应用解析

工业控制系统中电气隔离与TLP241A光耦应用解析

1. 电气隔离在工业控制系统中的核心价值工业控制系统中,电气隔离就像给电路装上了一道"防火墙"。我曾在多个工业现场亲眼目睹过没有隔离设计的系统在电机启停瞬间崩溃的场景。TLP241A光耦与STM32F427ZI的组合,正是为了解决这类痛点而生。电气隔…

2026/7/11 18:10:22阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/11 15:18:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/11 15:11:32阅读更多 →
Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

1. 为什么2025版PR安装比以往更“磨人”?——从弹窗警告到路径陷阱的真实处境 Premiere Pro 2025版不是简单的一次版本迭代,它是一道分水岭。我从去年底开始帮影视工作室、高校剪辑实验室和自由职业者部署2025环境,累计处理了137台设备&#…

2026/7/11 0:03:43阅读更多 →
5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效 【免费下载链接】open-source-mac-os-apps 🚀 Awesome list of open source applications for macOS. https://t.me/s/opensourcemacosapps 项目地址: https://gitcode.com/gh_mirrors/op/open-so…

2026/7/11 0:03:43阅读更多 →
5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:03:43阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/11 18:12:23阅读更多 →