南昌网站建设公司机构/网站seo快速优化技巧
有一个建议说时函数传递参数最好不超过四个,原因有一个是参数太多难以维护,另一个重要的原因就是函数传递小于四个参数时候效率会更高,其实这个说法也不全对,在不同的结构下不太一样,也不一定是4
其实那么下面将探究函数参数传递相关的问题
X86架构
这里拿比较常用的cdecl举例,先来一个简单的函数去传递六个参数去看传递的过程
#include <stdio.h>
#include <stdlib.h>int foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
{ int array[] = {arg1, arg2, arg3, arg4, arg5, arg6};return 0;
} int main ()
{foo(1, 2, 3, 4, 5, 6);return 0;
}
foo(1001, 1002, 1003, 1004, 1005, 1006)的反汇编:
ESP为栈顶,每条都将一个立即数(常量值)存储到相对于堆栈指针esp偏移一定字节数的位置,也就是将这四个参数进行了压栈处理
int array[] = { arg1,arg2,arg3,arg4,arg5,arg6 }的反汇编:
会发现每回都从栈[rsp+0xXX]里面取到一个参数,并放到array里面
X86的参数传递调用约定
在32位的调用约定有cdecl(C标准),stdcall(WinAPI默认),fastcall三种
cdecl,stdcall下规定参数传递顺序为从右到左依次压栈
fast下规定参数1、参数2、参数3、参数4分别保存在 RCX、RDX、R8D、R9D ,剩下的参数从右往左一次入栈
X64架构
传递6个参数
#include <stdio.h>
#include <stdlib.h>int foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
{ int array[] = {arg1, arg2, arg3, arg4, arg5, arg6};return 0;
} int main ()
{foo(1, 2, 3, 4, 5, 6);return 0;
}
foo(1001, 1002, 1003, 1004, 1005, 1006)的反汇编:
可以发现1,2,3,4四个变量分别存入到了EAX,EDX, R8D, R9D中了
但是多出去的5,6两个变量传递也压到了栈里面,
后面的过程1,2,3,4四个值会直接从EAX,EDX, R8D, R9D四个寄存器中拿到
而5,6就需要[rsp+0x28]和[rsp+0x20]中拿到了
X64的调用约定
参数1、参数2、参数3、参数4分别保存在 RCX、RDX、R8D、R9D ,剩下的参数从右往左一次入栈
ARM架构
ARM的CPU结构和X86不一样,所以寄存器的命名不一样
和X64方式差不多,前四个参数放到了r1,r2,r3,r4四个寄存器中,剩下的也进行了压栈
Arm的调用约定
ARM和ARM64使用的是ATPCS(ARM-Thumb Procedure Call Standard/ARM-Thumb过程调用标准)的函数调用约定
参数1~参数4 分别保存到 R0~R3 寄存器中 ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 R0 中
区别和结论
当直接访问寄存器的时候,不进行内存访问,CPU访问寄存器的速度大概在1-2个时钟周期
当你从[rsp+0xXX]获取数据时,实际上是在进行一次内存访问,内存访问的时钟周期大概在几十到上百之间,但是现代CPU的chche的结构会缩短这个时间,但是远远和直接访问寄存器的访问速度差的很远
可见,在特定的结构中,参数数量会对程序访问参数的速度有着一定的影响
相关文章:

为什么说函数传递参数最好小于四个
有一个建议说时函数传递参数最好不超过四个,原因有一个是参数太多难以维护,另一个重要的原因就是函数传递小于四个参数时候效率会更高,其实这个说法也不全对,在不同的结构下不太一样,也不一定是4 其实那么下面将探究函…...

三维立体自然资源“一张图”
随着信息技术的发展,自然资源管理迎来了新的机遇与挑战。在众多技术中,“三维立体自然资源‘一张图’”的概念尤为引人注目。它不仅代表了地理信息科学领域的最新成果,也为自然资源的有效管理和可持续利用提供了强有力的支持。本文将探讨这一…...

语言的重定向
输入输出重定向是相当有意思的一门技术,比如有的人每个月的收入自动转10%到支付宝,20%进了老婆的账户。这么有效益的事情,基本所有的操作系统都支持,本质上它不是编程语言特性,编程语言只是为了更方便调用操作系统的重…...

Snap 发布新一代 AR 眼镜,有什么特别之处?
Snap 发布新一代 AR 眼镜,有什么特别之处? Snap 简介 新一代的 AR 眼镜特点 Snap 简介 Snap 公司成立于 2010 年,2017 年美国东部时间 3 月 2 日上午 11 时许,在纽交所正式挂牌交易,股票代码为 “SNAP”。其旗下的核…...

从填空到生成:GLM的预训练新视界
论文题目:GLM: General Language Model Pretraining with Autoregressive Blank Infilling 论文地址:https://arxiv.org/pdf/2103.10360 今天分享一篇论文GLM,2022年由清华大学、智源研究院、MIT等机构发表在国际会议上。其创新点在于提出了一…...

4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
目录 前序工作 1. 服务器项目名和本地一致 2. pycharm连接服务器 3. 本地项目对应到服务器项目 4. 简单测试一下同步效果 同步成功 前序工作 在同步到服务器之前,得确保已经完成以下几个前置步骤: 1. 租一个云服务器,可参考:…...

「Python入门」vscode的安装和python插件下载
粗浅之言,如有错误,欢迎指正 文章目录 前言Python安装VSCode介绍VSCode下载安装安装python插件 前言 Python目前的主流编辑器有多个,例如 Sublime Text、VSCode、Pycharm、IDLE(安装python时自带的) 等。个人认为 vscode 虽然在大型项目上有…...

java-netty客户端断线重启
背景 经常会遇到netty客户端,因为网络等多种原因而断线,需要自动重连 核心 就是对连接服务端成功后,对ChannelFuture进行监听,核心代码如下 f b.connect("127.0.0.1", 10004).sync(); // (5)f.addListener(new Chan…...

MySQL的基础用法一
数据库的操作 对库的操作 SQL通用语法规则介绍 创建数据库 使用数据库 查询所有数据库 查询当前数据库 删除数据库 对库中表的操作 创建一个表 查询当前数据库所有表 查询表结构 查询指定表的建表语句 🚘🚘🚘正片开始 SQL通用语…...

Linux:进程地址空间
目录 一、虚拟地址 二、进程地址空间 一、虚拟地址 父进程和子进程之间,代码共享,而数据可能会发生修改,所以当其中一个进程要写入数据时,则发生写时拷贝,各自私有一份。 现在有源文件内容如下所示。 int glob_val …...

数据结构:树、森林
二叉树与树结构差异 树(一般树):树是一种数据结构,其中每个节点可以有任意数量的子节点(除了根节点和叶子节点外)。因此,一般树的节点在数组中的表示并不是那么直接,特别是当树不是完…...

AI Agent应用出路到底在哪?
1 Agent/Function Call 的定义 Overview of a LLM-powered autonomous agent system: Agent学会调用外部应用程序接口,以获取模型权重中缺失的额外信息(预训练后通常难以更改),包括当前信息、代码执行能力、专有信息源…...

一文了解构建工具——Maven与Gradle的区别
目录 一、Maven和Gradle是什么? 构建工具介绍 Maven介绍 Gradle介绍 二、使用时的区别: 1、新建项目 Maven: Gradle: 2、配置项目 Maven: Gradle: 3、构建项目——生成项目的jar包 Gradle&…...

electron介绍
Electron中文文档 Electron是什么? Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 允许开发者使用前端技术栈来创建可以在 Windows、macOS 和 Linux 等多个操作系统上运行的桌面应用程序。 Electron 本质上是一个运行在桌面操作…...

Redis-持久化
首先,我们明白一个概念, 硬盘>持久 内存>不持久 而Redis是一个内存数据库,不持久,相比于Mysql这样的关系型数据库,最明显的特点是快/效率高 为了保证速度快,数据要保存再内存中,为了持久,存储在硬盘上 所以redis决定: 插入>内存+硬盘(硬盘是为了在re…...

封装轮播图 (因为基于微博小程序,语法可能有些出入,如需使用需改标签)
这是在组件中使用,基于微博语法 <template><wbx-view class"" style"width: 100vw;height: 70vh;"><WBXswiper change"gaibian" :vertical"false" :current"current" indicatorActiveColor"…...

【Ubuntu】minicom安装、配置、使用以及退出
目录 1 安装 2 配置 3 使用 4 退出 minicom是一个串口通信的工具,以root权限登录系统,可用来与串口设备通信。 1 安装 sudo apt-get install minicom 2 配置 使用如下命令进入配置界面: sudo minicon -s 进入配置界面后,…...

MYSQL的监控
1. MySQL服务器都提供了哪几种类型的日志文件?说明每种日志的用途。 Error log:启动、关闭和异常有关的诊断信息 General query log:服务器从客户端收到的所有语句 Slow query log:需要很长时间执行的查询 Audit log:企业版基于策略的审计 Binary…...

CTF ciscn_2019_web_northern_china_day1_web2
ciscn_2019_web_northern_china_day1_web2 BEGIN 拿到题目,先看看 这里发现一个很像提示的东西,然后发现下面是一堆小电视商品,有lv等级和金钱,所以这题的入口可能就是再lv6和这个资金募集上 然后点击下next,看看页…...

linux中vim编辑器的应用实例
前言 Linux有大量的配置文件,其中编辑一些配置文件,最常用的工具就是 Vim ,本文介绍一个实际应用的Vim编辑器开发文档的实例。 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。…...

智慧城市交通管理中的云端多车调度与控制
城市交通管理中的云端多车调度与控制 智慧城市是 21世纪的城市基本发展方向,为了实现智慧城市建设的目标,人们需要用现代化的手段去管理和控制城市中的各种资源和设施。智能交通控制与管理是智慧城市中不可缺少的一部分,因为现代城市交通系统…...

分治(归并排序)
一、基本思路 我们以一个归并排序为例。 . - 力扣(LeetCode) 归并排序的思想:得到两个有序数组,把两个有序数组合并,传到下一层递归,一直得到两个有序数组,一直合并,最后就能得到有…...

小学生为什么要学英语
小学生需要学习英语的原因有很多,以下是其中的一些原因(毕竟我也会累滴(* ̄▽ ̄*)): 1. 全球化交流:英语是国际交流的通用语言,学习英语可以帮助小学生更好地融入全球化的社会环境&am…...

企业云存储如何收费?企业云存储收费标准
企业云存储如何收费?企业云存储的收费方式因不同的服务提供商和具体的服务选项而异,通常从用户数量、存储容量、功能、混合收费、按需定价、定制化、功能模块等多个方面进行考量。以下是对其多方面收费方式的详细介绍: 1.按用户数量收费 适用…...

一步步教你LangGraph Studio:可视化调试基于LangGraph构建的AI智能体
之前我们在第一时间介绍过使用LangChain的LangGraph开发复杂的RAG或者Agent应用,随着版本的迭代,LangGraph已经成为可以独立于LangChain核心,用于开发多步骤、面向复杂任务、支持循环的AI智能体的强大框架。 近期LangGraph推出了一个使得复杂…...

用SpringBoot打造先进的学科竞赛管理系统
1绪 论 1.1研究背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其…...

Linux入门攻坚——34、nsswitch、pam、rsyslog和loganalyzer前端展示工具
nsswitch:network service switch 名称解析:name <---> id 认证服务:用户名、密码验证或token验证等 名称解析和认证服务都涉及查找位置,即保存在哪里。如linux认证,passwd、shadow,是在文件中&…...

如何在Excel中快速找出前 N 名,后 N 名
有如下销售额统计表: 找出销售额排前 10 名的产品及其销售额,和销售额排倒数 10 名以内的产品及其销售额,结果如下所示: 前 10 名: spl("E(?1).sort(ProductSales:-1).to(10)",A1:C78)后 10 名࿱…...

创意实现!在uni-app小程序商品详情页轮播中嵌入视频播放功能
背景介绍 通过uni-app框架实现商城小程序商品详情页的视频与图片轮播功能,以提升用户体验和增加商品吸引力。通过展示商品视频和图片,用户可以更全面地了解商品细节,从而提高购买决策的便利性和满意度。这种功能适用于各类商品,如…...

WAF,全称Web Application Firewall,好用WAF推荐
WAF,全称Web Application Firewall,即Web应用防火墙,是一种网络安全设备,旨在保护Web应用程序免受各种Web攻击,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。 WAF通…...