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

【ARM 嵌入式 编译系列 2.8 -- GCC 编译优化参数 位置无关码】


请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】


文章目录

    • ARM GCC 位置无关码
      • -fpic 编译选项
      • 无位置相关码(PIC)
      • 为什么使用 PIC?
      • 代码示例
        • 编译为目标文件
        • 链接为共享库
        • 使用共享库
      • ARM 汇编中位置无关码
        • 编译为目标文件
        • 链接为共享库
        • 使用共享库
        • 详细解释

ARM GCC 位置无关码

位置无关码(PIC)是一种编写和编译技术,生成的机器代码可以在内存中的任何位置执行而无需进行重定位。PIC 主要用于共享库,这使得它们可以被多个程序共享,节省内存并减少程序的磁盘占用。

-fpic 编译选项

-fpic(或 -fPIC)选项用于生成位置无关代码(Position-Independent Code,PIC)。位置无关代码是一种编译生成的机器代码,这种代码可以在内存中的任何位置执行而不需要修改。使用 -fpic 选项编译的代码特别适用于共享库,因为共享库在加载时未必会被映射到同一内存地址。

无位置相关码(PIC)

无位置相关码(PIC)是一种编译技术,生成的机器代码可以在内存中的任何位置执行而无需进行重定位。PIC 主要用于共享库(shared libraries)和动态链接库(dynamic link libraries, DLLs),这使得它们可以被多个程序共享,节省内存并减少程序的磁盘占用。
PIC 的主要特点是使用相对地址而非绝对地址来访问数据和函数。这种技术依靠 CPU 指令集和编译器的支持,使得代码不依赖于特定的内存地址,从而实现了其通用性和灵活性。

为什么使用 PIC?

  1. 共享库:共享库可以被多个程序同时使用,而不需要为每个程序复制一份库代码。这大大减少了内存使用和磁盘空间。
  2. 安全性:位置无关代码有助于实现地址空间布局随机化(ASLR),这是一种安全技术,通过随机化内存地址来防止某些形式的攻击。
  3. 动态加载:PIC 使得库可以在运行时动态加载到内存中的任何位置,这对于插件系统和模块化设计非常有用。

代码示例

假设我们有以下源代码文件 math.c

// math.c
int add(int a

http://www.kler.cn/a/320649.html

相关文章:

  • 号卡分销系统,号卡系统,物联网卡系统源码安装教程
  • Uniapp 引入 Android aar 包 和 Android 离线打包
  • JsonCpp
  • MongoDB在现代Web开发中的应用
  • 从零入门激光SLAM(二十三)——direct_visual_lidar_calibration全型号激光雷达-相机标定包
  • 27.<Spring博客系统③(实现用户退出登录接口+发布博客+删除/编辑博客)>
  • Chat2VIS: Generating Data Visualizations via Natural Language
  • 【Android】BottomSheet基本用法总结(BottomSheetDialog,BottomSheetDialogFragment)
  • Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.
  • 隧道面稳定性分析MATLAB
  • 立志最细,在FreeRtos中数据传输方式及应用!!!
  • PostgreSQL 创建表,常规表、外部表、分区表区别讲解
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 1 简介
  • 前端开发必备:实用Tool封装工具类方法大全
  • vscode【实用插件】Markdown Preview Enhanced 预览 .md 文件
  • 时尚与科技的融合,戴上更轻更悦耳的QCY C30耳夹耳机,随时享受好音乐
  • 计算机毕业设计 基于Python的荣誉证书管理系统 Django+Vue 前后端分离 附源码 讲解 文档
  • python自定义日志等级
  • 企业级-pdf预览-前后端
  • 免费开源的AI 智能网盘,图片和媒体管理工具 | 极空间部署『PicHome』
  • GUI编程18:文本框、密码框、文本域
  • MT76X8、MT7621和MT7981 接NOR FALSH分区表
  • Focalboard开源项目管理系统本地Windows部署与远程访问协同办公
  • C语言读取一行字符_只需要看第四条
  • vue3中echarts柱状图横轴文字太多放不下怎么解决
  • 【深度学习】初识神经网络