RISC-V 架构适配知识库
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 简介
    • 贡献规范
  • 入门
    • 内存一致性模型
    • 硬件开发板差异
    • 指令集模块
  • 通用调整
    • 检查项目对多架构的支持性
    • 文件结构调整
    • 目录结构调整
    • 测试用例调整
  • C/C++ 程序
    • 内联汇编
    • 宏定义与判断
    • 移位运算中的整形常数
    • Intrinsic 函数
    • 多版本函数
    • 系统调用
  • 汇编程序
  • 编译配置文件
    • rpmbuild
    • Makefile
    • CMake
    • Autoconf
    • QMake
    • 其它
  • 其它编程语言
    • Rust
    • Go
    • Python
    • 其它语言
  • 辅助工具集
    • 目标代码定位工具
    • 汇编指令翻译工具

C/C++ 程序

作为基础软件广泛使用的编程语言,C/C++ 语言编写的程序在经过编译后, 会生成针对目标平台的二进制可执行文件。这种可执行文件是 与目标平台强相关的, 通常只能在同一种 指令集架构 的硬件平台上才能够执行。

许多 C/C++ 语言编写的程序会访问一些操作系统所提供的、相对底层的 API, 甚至直接与硬件开展交互。一方面,此类程序执行效率得到了提高; 但另一方面,也使这些程序中具备了一些 与硬件架构强相关 的代码。

尽管通过现代编译器提供的“交叉编译”等手段,可以将同样的 C/C++ 代码编译到多种不同目标平台, 但由于 硬件架构强相关 代码的存在,开发者仍然需要针对不同的硬件架构妥善处理, 包括但不限于:

  • 为多个硬件架构编写相关代码
  • 模拟实现某些目标硬件架构不支持的特性
  • 针对不同目标硬件架构指定不同的编译参数
  • ...

经过上述处理后,才能完成针对不同平台的编译过程,否则可能产生各种编译失败的情况。

硬件架构强相关的代码模式

C/C++ 程序中,目前已知的有以下 6 种与硬件架构强相关的代码模式。

  • 内联汇编:指在 C/C++ 源程序中直接编写的 汇编指令片段
  • 宏定义与引用:指在 C/C++ 源程序中引用的由编译器或操作系统提供的 架构相关宏
  • 移位运算中的十六进制常数:指在 C/C++ 源程序的移位运算相关操作中使用的 十六进制常数,一般与内存对齐、端序转换有关
  • Intrinsics 函数:指在 C/C++ 源程序中引用的、由 编译器内置提供 的架构特有函数
  • 多版本函数 (Function Multiversioning): 指在 C++ 程序中借助属性标签 __attribute__ 针对不同目标架构 切换函数具体实现 的一种方式
  • 系统调用:指在 C/C++ 源程序中使用的由操作系统提供的 系统调用函数,其中一小部分是只有特定架构下才具有的
编辑本页面
最后更新时间:
贡献者: LightningRS
Prev
通用调整
Next
汇编程序

本知识库采用 木兰开放作品许可协议 署名-相同方式共享 第1版 进行许可

版权所有 © 2025 RVSmartPorting. | 京ICP备20005262号 | beian京公网安备11010802043677号