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

豆瓣 wordpress 插件做一个网站加优化排名得多少钱

豆瓣 wordpress 插件,做一个网站加优化排名得多少钱,成都住建局官网住建蓉e办,网址注册在哪里注册【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 接之前 blog 【OS】【Nuttx】【启动】栈…

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

接之前 blog
【OS】【Nuttx】【启动】栈溢出保护:volatile 关键字(修饰变量)
分析了 volatile 关键字对变量的修饰作用,下面再来看 volatile 关键字的下一个用法,也是之前分析栈溢出时语句的用法

volatile 关键字

还是回到这张图
在这里插入图片描述
上篇 blog 分析了 volatile 关键字修饰变量,表示这个寄存器变量的值可能会在任何时刻被意想不到的方式改变,在每次访问该变量时都要从内存中重新读取其值,而不是用存储在寄存器中的副本,那么上面这张图就是 volatile 关键字的另一个用法,修饰内联汇编语句

修饰内联汇编

来看下 gcc 官方文档对这块的描述
在这里插入图片描述
有几个点:

  • 扩展汇编语句的典型用途是对输入值进行处理,生成输出值,比如将 C 变量与汇编指令中的寄存器绑定
  • 但有些汇编语句也可能产生副作用,这些典型的副作用包括修改硬件状态,写入寄存器,改变内存,触发中断等,这些副作用是编译器感知不到,或者说判断不了是否有用的,此时编译器对这些汇编语句可能就会产生优化行为,比如删掉这段汇编代码
  • 此时就需要用 volatile 关键字来禁用掉编译器的某些优化,这些优化包括删除看起来没用的汇编语句,重排指令顺序,合并重复操作等等,尤其在汇编语句没有输出(但有副作用,比如写硬件寄存器)的情况下,编译器可能认为这条语句没用(注意这里是可能,不是一定,取决于编译器优化的保守程度),而把它优化掉,此时 volatile 关键字就会告诉编译器:这段汇编很重要,不要优化,一定要按顺序执行

下面对上面三个点再详细展开举例下

扩展汇编的典型用途

典型用途:将 C 变量与汇编指令中的寄存器绑定

这种用法比那种只有副作用的汇编语句相对来说更“安全”,因为编译器此时能感知到 C 变量在其中起作用了,但也只是相对的,取决于编译器的优化程度和保守程度,最佳的编程实践还是所有内联汇编语句都加上 volatile,明确告诉编译器不要优化

比如下面这段代码,就是 C 变量与内联汇编混用的典型场景

// main.c
#include <stdio.h>int main(void) {int src = 1;int dst;   __asm__ volatile("mov %1, %0\n\t" : "=r" (dst) : "r" (src));printf("%d\n", dst);
}

带有副作用的内联汇编

典型副作用:修改硬件状态,写入寄存器,改变内存,触发中断等

这些副作用对编译器来说相当于是未定义的,编译器对这些汇编语句可能产生优化行为,从用户使用角度来说,肯定是希望同一份代码能支持不同编译器,别编译器 A 编译后能保留这些汇编语句,换了编译器 B 这些汇编语句可能就被优化掉,所以最佳的实践还是都加上 volatile,明确告诉编译器不要优化

比如下面这段代码,不关联任何 C 变量,只对通用寄存器进行操作

// main.c
#include <stdio.h>int main(void) {__asm__ volatile ("sub r10, sp, %0" : :"r"(64) :);return 0;
}

在终端 bash 中输入命令(这里 --specs=nosys.specs 表示暂时不需要系统调用功能,告诉链接器忽略相关未定义的符号)

arm-none-eabi-gcc -mthumb -O3 -mcpu=cortex-m4 --specs=nosys.specs main.c -o main

再反汇编,终端输入

arm-none-eabi-objdump -d main > main.s

可以看到汇编语句中,可以看到最终的汇编语句明确保留了下来(不加 volatile 不是说一定会被优化,对 gcc 编译器来说,gcc 对 asm 处理比较保守,特别是当不能确定是否会有副作用时,对用户来说,加上 volatile 肯定是最佳的编程实践,就像家庭电气回路里的保险丝一样,你不知道它啥时候出现电流过载,加上是最保险的)
在这里插入图片描述

先到这里,下篇 blog 回到栈溢出继续

http://www.dtcms.com/a/495411.html

相关文章:

  • 医疗实验室智能搬运方案:柔性革命与精准革新
  • 数据库快速加密与脱敏的融合实践:破解开发测试与数据共享的安全困局
  • 依赖关系管理:大模型分析代码库中的依赖关系,优化模块化设计
  • 在芯片互联中铝为什么会被替代呢?
  • 三门峡做网站手机销售培训网站
  • 东莞市建设公共交易中心网站首页乌克兰设计网站建设
  • QML学习笔记(四十一)QML的ColorDialog和FontDialog
  • [LVGL] 从0开始,学LVGL:进阶应用与项目实战(上)
  • 使用 Loki + Promtail + Grafana搭建日志系统
  • PySide 查找功能大杂烩 基于文本编辑器(QPlainTextEdit)
  • Vue3 路由配置和使用与讲解(超级详细)
  • 东盟建设集团重庆工程有限公司网站500强企业排名(2022最新名单)
  • 初次使用基于K3S的大数据平台
  • 极简入门Zookeeper
  • 国产工业软件:制造强国的“破局”之路
  • 从重机展到全球市场:数字化助力装备制造企业实现规范化管理
  • 半导体制造工艺基本认识 二 氧化
  • MongoDB 是关系型数据库吗?
  • 织梦dedecms网站内容页wordpress rss导入
  • RAG各模块联合优化思路:多智能体协作建模-MMOA-RAG浅尝
  • 【小白笔记】KNN 核心预测函数 _predict_one 的过程
  • 营销人职业成长路径:从执行到战略的能力进阶与知识体系构建
  • Elasticsearch 推理 API 增加了开放的可定制服务
  • 做电影网站还能赚钱ace wordpress
  • 建设农家书屋官方网站临沂设计网站的公司
  • 10.queue的模拟实现
  • 有多少网站可以推广业务阿里云个人网站建设
  • 【知识点总结】Vue2 与 Vue2 区别
  • 【CV】神经网络中哪些参数需要被学习?
  • Spring两大漏洞可导致泄露敏感信息及安全防护绕过(CVE-2025-41253/41254)