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

【ARM 嵌入式 编译系列 4 -- GCC 编译属性 __read_mostly 详细介绍】

文章目录

    • __read_mostly 介绍
      • __read_mostly 在 linux 中的使用
      • .data.read_mostly 介绍

__read_mostly 介绍

__read_mostly 是一个在Linux内核编程中用到的宏定义,这是一个gcc编译器的属性,用于告诉编译器此变量主要用于读取,很少进行写入,最好将此变量放在具有相同特性的变量附近。使用这个宏可以优化程序在运行时的缓存性能,因为处理器会缓存经常读取的部分。

这个宏在arm gcc中和其他平台的gcc编译器中都有同样的作用。

以下是一个简单的使用示例:

static int __read_mostly my_variable = 0;

在这个示例中,my_variable 被声明为一个主要用于读取的静态变量。这意味着在大多数情况下,my_variable 的值将被读取,而不是写入。通过这种方式,编译器可以进行一些优化,提高代码执行的效率。

__read_mostly 在 linux 中的使用

arch/arm/kernel/process.c 中有如下定义:

unsigned logn stack_chk_guard __read_mostly

参考网上资料了解到 __read_mostly 修饰的变量放在定义为存放在 .data.read_mostly 段中。

#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
#else
#define __read_mostly
#endif

Linux 内核被加载时,__read_mostly 修饰的数据将自动被存放到 Cache 中,以提高整个系统的执行效率。

如果所在的平台 没有 Cache,或者虽然有Cache,但并不提供存放数据的接口(也就是并不允许人工放置数据在Cache中),这样定义为 __read_mostly类型的数据将不能存放在Linux内核中,甚至也不能够被加载到系统内存去执行,将造成Linux 内核启动失败。

解决的方法有两种:

  • 修改 include/asm/cache.h 中的 __ready_mostly 定义为:#define __read_mostly
  • 修改 arch/xxx/kernel/vmlinux.S,将 .data.read_mostly 段的位置到实际内存空间中去,例如放置在 .data 段之后等等。

.data.read_mostly 介绍

.data.read_mostly 是Linux内核中的一个特殊的数据段。这个段用于存放被__read_mostly宏标记的变量。这些变量主要用于读取,很少进行写入,所以将它们放在同一个区域可以优化处理器的缓存性能。

在Linux内核编译过程中,GCC编译器会根据__read_mostly宏的标记,将对应的变量放在.data.read_mostly数据段中。这样,处理器在进行内存访问时,可以把这个段的数据预先加载到缓存中,从而提高访问效率。

需要注意的是,使用__read_mostly标记并不意味着这个变量永远不会被写入,而只是一个优化建议,指示编译器这个变量在大部分时间里是被读取的,写入操作相对较少。

相关文章:

【ARM 嵌入式 编译系列 4 -- GCC 编译属性 __read_mostly 详细介绍】

文章目录 __read_mostly 介绍__read_mostly 在 linux 中的使用.data.read_mostly 介绍 __read_mostly 介绍 __read_mostly 是一个在Linux内核编程中用到的宏定义,这是一个gcc编译器的属性,用于告诉编译器此变量主要用于读取,很少进行写入&am…...

Maven在IDEA2021版本中全局配置(一次配置处处生效)

前言 我们在开发中,Maven是必不可少的,但是每次都需要设置一遍Maven的仓库和settings.xml。真的是心累,今天教大家全局配置一下。再也不要每次项目都配了,Maven还经常出问题。 解决方案 友情提示:小编的IDEA版本为2…...

名侦探番外——Arduino“炸弹”引爆摩天大楼

名侦探番外——Arduino“炸弹”引爆摩天大楼 硬件准备1.材料准备2.模块介绍 电路设计1.硬件接线 程序设计1.设计思路2.部分程序3.功能优化 总结 好久不见,童鞋们!小编突然想到很久以前看的柯南剧场版——计时引爆摩天大楼的情景,对剧里的“炸…...

自适应AI chatgpt智能聊天创作官网html源码

我们致力于开发先进的自适应AI智能聊天技术,旨在为用户提供前所未有的聊天体验。通过融合自然语言处理、机器学习和深度学习等领域的顶尖技术,我们的智能聊天系统能够准确理解用户的需求并给出相应的回应。 我们的自适应AI智能聊天系统具备以下核心特点…...

防抖,节流

概念 防抖(debounce):类似法师技能读条,读条没完再按技能就会重新读条,在触发后的n秒内只会执行一次,若在这n秒内重复触发则重新计算 节流(throttle):连续发生的事件在n秒内只执行一次函数 参考 【前端面试必问】—…...

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…...

【Maven】SpringBoot项目使用maven-assembly-plugin插件多环境打包

SpringBoot项目使用maven-assembly-plugin插件多环境打包 1.创建SpringBoot项目并在pom.xml文件中添加maven-assembly-plugin配置 <!-- 多环境配置 --><profiles><!-- 开发环境 --><profile><id>dev</id><properties><prof…...

指令集_基础

指令集-基础 一、提示过程1,文章摘要2&#xff0c;数学问题求解 二、角色提示三、多范例提示 一、提示过程 指导人工智能&#xff0c;执行任务的过程&#xff0c;称为提示过程。向AI 提供一组指令&#xff08;提示&#xff09;&#xff0c;然后它执行任务 1,文章摘要 例如&a…...

学习Vue:数据绑定的基本概念

在 Vue.js 中&#xff0c;Vue 实例是您构建应用程序的核心。它允许您将数据和界面连接起来&#xff0c;实现动态的数据绑定&#xff0c;使您的应用程序能够根据数据的变化自动更新界面。让我们来深入了解 Vue 实例与数据绑定的基本概念。 Vue 实例与数据绑定 什么是 Vue 实例&…...

Python 装饰器 - 推导式(列表推导式) - 迭代器 - 生成器 - 闭包

目录 推导式 1、列表推导式&#xff08;用得最多的&#xff09; 给你一个列表&#xff0c;求所有数据的绝对值 列表推导式跟if运算 打印50以内能被3整除的数的平方&#xff08;filter&#xff09;&#xff08;if的使用&#xff09; 找到1000以内开平方的结果是整数的数&am…...

【大数据】Flink 详解(二):核心篇 Ⅲ

Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅲ 29、Flink 通过什么实现可靠的容错机制&#xff1f; Flink 使用 轻量级分布式快照&#xff0c;设计检查点&#xff08;checkpoint&#xff09;实现可靠容错。 30、什么是 Checkpoin 检查点&#xff1f; Checkpoint …...

Jmeter性能测试系列-性能测试需求分析

性能测试需求分析 性能测试需求分析与传统的功能测试需求有所不同&#xff0c;功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性&#xff0c;性能测试则需要从终端用户应用、系统架构设计、硬件配置等多个纬度分析系统可能存在性能瓶颈的业务。 性…...

Syncfusion Essential Studio JavaScrip Crack

Syncfusion Essential Studio JavaScrip Crack 数据透视表 添加了在将数据透视表导出到PDF文档时自定义列宽的支持。 签名 添加了对在特定位置绘制文本的支持。 Syncfusion Essential Studio for JavaScript在一个包中包含80多个高性能、轻量级、模块化和响应式UI组件。包括Jav…...

8.13黄金是否进入下行通道?下周开盘如何布局

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(8月11日)现货黄金小幅收低&#xff0c;受累于美元走强和美国国债收益率上升&#xff0c;本周录得6月底以来最差单周表现。投资者在评估最新一批通胀报告和消费者信…...

Idea的基本使用带案例---详细易懂

一.idea是什么 有专业人士说&#xff0c;idea是天生适合做微软&#xff0c;当时我还想肯定是夸大其词了&#xff0c;但当你用起来的时候确实很爽&#xff0c;&#x1f60a;&#x1f60a; ntelliJ IDEA是一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains开发…...

MySQL中的用户管理

系列文章目录 MySQL常见的几种约束 MySQL中的函数 MySQL中的事务 MySQL中的视图 MySQL中的索引 文章目录 系列文章目录前言一、用户管理1、用户管理入门2、用户管理操作及示例 二、权限管理1.权限管理语法2.权限操作示例 三、角色管理1、角色管理入门2、角色操作示例 总结…...

【STM32】利用CubeMX对FreeRTOS用按键控制任务

对于FreeRTOS中的操作&#xff0c;最常用的就是创建、删除、暂停和恢复任务。 此次实验目标&#xff1a; 1.创建任务一&#xff1a;LED1每间隔1秒闪烁一次&#xff0c;并通过串口打印 2.创建任务二&#xff1a;LED2每间隔0.5秒闪烁一次&#xff0c;并通过串口打印 3.创建任…...

c# .net mvc的IHttpHandler奇妙之旅--图片文件请求安全过滤,图片防盗链

源码下载: c# .net mvc图片文件请求安全过滤,图片防盗链 https://download.csdn.net/download/cplvfx/88206428 在阅读该文章前,请先阅读该文章 c# .net mvc的IHttpHandler奇妙之旅。.net的生命周期和管道你听说过吗?你可以利用他处理业务如:跳转业务页面,文件请求的安全…...

STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

只用STM32单片机SD卡耳机插座&#xff0c;实现播放MP3播放器&#xff01; 看过很多STM32软解MP3的方案&#xff0c;即不通过类似VS1053之类的解码器芯片&#xff0c;直接用STM32和软件库解码MP3文件&#xff0c;通常使用了labmad或者Helix解码库实现&#xff0c;Helix相对labm…...

STM32 CAN 过滤器设置

做个笔记吧 &#xff0c;免得以后忘记了 芯片是stm32F207 &#xff0c;用cubeMX 6.80 版本生成 CAN 的使用总体包含4个部分 第一步&#xff1a;CAN初始化&#xff0c;配置波特率 (cubeMX 里面配置好后自动生成&#xff0c;不需要手动添加) MX_CAN1_Init(); 第二步&#…...

卡尔曼滤波在无人机飞控和机器人SLAM里到底怎么用?一个实例讲透

卡尔曼滤波在无人机飞控中的实战&#xff1a;从IMU-GPS融合到状态估计 1. 无人机状态估计的工程挑战 当你在郊外试飞新组装的四旋翼无人机时&#xff0c;突然发现GPS信号出现波动&#xff0c;而IMU数据也开始漂移。这时飞控系统如何保持稳定的姿态控制&#xff1f;这个看似简单…...

终极指南:如何使用Python实现同花顺自动化程序交易

终极指南&#xff1a;如何使用Python实现同花顺自动化程序交易 【免费下载链接】jqktrader 同花顺自动程序化交易 项目地址: https://gitcode.com/gh_mirrors/jq/jqktrader 在量化投资领域&#xff0c;自动化交易已成为专业投资者的标准配置。本文将详细介绍如何利用jqk…...

DBShadow横空出世,Dapper.net的天花板盖不住了

一、DBShadow是什么DBShadow是.net开源的高性能ORMDBShadow使用开源项目ShadowSql高效拼接sqlDBShadow使用开源项目PocoEmit.Mapper高效映射查询参数和查询结果也就是说SqlBuilder(ShadowSql)OOM(PocoEmit.Mapper)ORM(DBShadow)二、DBShadow和Dapper对比一下1. Dapper代码await…...

在QT中将多个项目(同代码不同ui和资源文件)合并

Linux下的qt环境 我现在有三个项目&#xff0c;代码一模一样&#xff0c;只有UI文件和资源文件不同现在想要合并代码 后期好上传在git 仅需要一个分支 更好管理将随行 康养 采图三个项目代码合并 思路是这样的 将每个项目都分类打包区分开我是在康养这个项目的基础上合…...

Kandinsky-5.0-I2V-Lite-5s企业实操:单任务串行设计规避显存过载,保障服务稳定性

Kandinsky-5.0-I2V-Lite-5s企业实操&#xff1a;单任务串行设计规避显存过载&#xff0c;保障服务稳定性 1. 产品概述 Kandinsky-5.0-I2V-Lite-5s是一款轻量级图生视频模型&#xff0c;专为企业级稳定运行而优化。只需上传一张首帧图片&#xff0c;再补充运动或镜头描述&…...

知识获取受限?5款开源工具助你合法解锁付费内容

知识获取受限&#xff1f;5款开源工具助你合法解锁付费内容 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾在学术研究关键时刻被期刊付费墙阻挡&#xff1f;是否因新闻网站的…...

CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验

CentOS7下KingbaseES V9与MySQL性能对比实测&#xff1a;从安装到查询优化的全流程体验 在国产数据库技术快速发展的今天&#xff0c;越来越多的企业开始关注从传统数据库向国产化解决方案的迁移。作为国产数据库中的佼佼者&#xff0c;KingbaseES V9凭借其出色的MySQL兼容性和…...

西门子1200控制下的单部11层电梯仿真系统:完全电脑操作、清单与组态HMI界面解析

.单部11层电梯&#xff0c;基于西门子1200 不用实物即可仿真&#xff0c;仅需一台电脑&#xff0c;欢迎学习 清单&#xff1a;plc程序HMI组态画面wincc编写电气接线图硬件框架图io表报告 备需要报告的另加&#xff0c;主讲图纸不会细讲搞电梯仿真这事儿吧&#xff0c;说难也不…...

WarcraftHelper:魔兽争霸III性能优化终极指南 - 10分钟打造完美游戏体验

WarcraftHelper&#xff1a;魔兽争霸III性能优化终极指南 - 10分钟打造完美游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经…...

OpenCore Legacy Patcher:终极指南让老旧Mac焕然新生

OpenCore Legacy Patcher&#xff1a;终极指南让老旧Mac焕然新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方放弃支持的老旧Mac&a…...