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

搭建微网站的基本流程/关联词有哪些五年级

搭建微网站的基本流程,关联词有哪些五年级,网站建设 海口,wordpress银行模板C初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住:内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住:内存的结构 堆(自由存储) 用于动态存…

C++初学者指南第一步—14.函数调用机制

文章目录

  • C++初学者指南第一步---14.函数调用机制
    • 1.记住:内存的结构
    • 2.函数调用是如何工作的
    • 3. 不要引用局部变量
    • 4. 常见编译器优化
    • 5. Inlining内联

1.记住:内存的结构

在这里插入图片描述
堆(自由存储)

  • 用于动态存储期对象,例如 std::vector 的内容。
  • 空间大,可以用于大容量存储(大多数用于主内存)。
  • 可以根据需要分配和释放任何对象。
  • 按照无特定顺序的分配(释放) ⇒ 碎片化。
  • 分配速度慢:需要为新对象找到连续未被占用的空间。

在这里插入图片描述

  • 自动存储期对象使用:局部变量,函数参数等。
  • 空间小(通常只有几兆(M)字节)。
  • 分配速度快:新对象总是放在栈顶部。
  • 对象按它们创建的相反顺序被释放。
  • 无法释放顶端(= 最新的)以下的对象。

2.函数调用是如何工作的

<1>该示例假定没有编译器优化,例如内联(用函数体替换函数调用),返回类型优化等。
此外,在函数调用时放入栈的确切顺序(调用约定)取决于平台(CPU 架构 + 操作系统 + 编译器)。
在这里插入图片描述
<2>程序开始。
在这里插入图片描述
<3>局部变量 y 被放入栈。
在这里插入图片描述
<4> 局部变量 i 被放入栈。
在这里插入图片描述
<5> 函数的返回值占位符被放入堆栈
在这里插入图片描述
<6> 当前指令的内存地址被放在栈上,这样在离开被调用的函数后,我们就知道从哪里恢复程序。
在这里插入图片描述
<7> 帧指针标记了当前函数的栈帧的开始。在当前栈帧内的一切都将被视为函数局部的。需要帧指针是因为不同的函数调用可能有不同大小的栈帧。
在这里插入图片描述
<8> 执行跳转到函数square的内存地址。
在这里插入图片描述
<9> 函数参数p放在栈上,它的值由调用参数(y的值)决定。
注意:返回地址、占位符、局部参数等放在栈上的顺序取决于平台的调用约定(CPU体系结构+ OS +编译器)。
在这里插入图片描述
<10> 函数局部变量 x 放到栈上。
在这里插入图片描述

<11> 表达式 p * p 的结果被赋给 x。
在这里插入图片描述
<12> 语句return x,将 x 的值复制到 返回值占位符。
在这里插入图片描述
<13>离开函数square时: 堆栈的顶部位置减少到堆栈帧下方;这意味着所有函数局部变量都从堆栈中弹出。
在这里插入图片描述
<14> 执行通过跳转到之前存储的返回地址返回到调用位置。
在这里插入图片描述
<15> 赋值语句int i = …会导致返回值被复制到i中。
在这里插入图片描述
<16> square函数的返回值被从栈中弹出。
在这里插入图片描述
<17> 局部变量k被放入栈。
在这里插入图片描述
<18> 程序结束,所有关联的变量都会从栈中弹出。
在这里插入图片描述

3. 不要引用局部变量

如果我们把返回类型改为int&会怎么样呢?
<1>
在这里插入图片描述
<2> 在从square返回之前栈内容:

  • 函数局部变量x
  • 函数参数p
  • 函数调用后的下一条指令的地址
  • square返回值的占位符
  • main函数的局部变量 y 和 i
    在这里插入图片描述
    <3> 语句return x;将 x 的地址复制到 返回值占位符。
    在这里插入图片描述
    <4> 离开函数square: 栈的顶部位置降低到栈帧下方; 这意味着所有square函数的局部变量都会从栈中弹出。
    通过跳转到先前存储的返回地址,执行流程回到调用位置。
    在这里插入图片描述
    <5> 赋值 int& i = … 会导致返回值(一个整数的内存地址)被复制到引用 i& 中。
    x的内存位置实际上在栈的当前顶部位置之上。任何后续的栈分配都会导致它被其他值覆盖。
    这将导致 => 未定义行为
    这样的程序在运行时行为是未定义的/非确定性的,因为它有时可能会工作(如果 x 的内存没有被覆写)有时可能不会。
    在这里插入图片描述

4. 常见编译器优化

现代的 C++ 编译器进行多项优化(尤其是在较高的优化级别 -O2 和 -O3),使函数调用速度更快。
Return Value Optimization 返回值优化 (RVO)

  • 适用于类似:return Type{}; 或 return Type{argument,…}; 这样的语句。
  • 不会分配额外的占位符用于返回值,也不会进行复制。相反,外部对象 res 将直接在调用位置构造。
  • 这种优化是强制的,即在 C++17 版本中必定会执行。
Point foo (…) { …return Point{…};
}
Point res = foo();

Named Return Value Optimization 命名返回值优化 (NRVO)

  • 适用于类似: return local_variable; 这样的语句。
  • 不会分配额外的占位符用于返回值,也不会进行复制。相反,本地对象 loc 和外部对象 res 被视为同一个对象。这样在调用点仅会发生一次分配。
  • 这种优化不是必需的,但几乎所有现代编译器都会尽可能地执行它。
Point foo (…) {Point loc;…return loc;
}
Point res = foo();

5. Inlining内联

调用小/短函数的地方被该函数的代码替换。
在这里插入图片描述
内联只会发生在编译器“看到”函数声明的同时也看到它的完整定义,如果我们分别编译程序的不同部分,这种情况就不一定会发生(更多内容请参考《分离编译》章节)。
这是 C++ 性能优势的一个来源。在许多其他语言(比如 Java、C# 等)中,内联化要困难得多,有时甚至是不可能的。这些语言通常具有始终开启的多态性,这意味着所有/大多数函数/方法调用只能在运行时解析。

附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^

相关文章:

C++初学者指南第一步---14.函数调用机制

C初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住&#xff1a;内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住&#xff1a;内存的结构 堆&#xff08;自由存储&#xff09; 用于动态存…...

Apache Flink类型及序列化研读生产应用|得物技术

一、背景 序列化是指将数据从内存中的对象序列化为字节流&#xff0c;以便在网络中传输或持久化存储。序列化在Apache Flink中非常重要&#xff0c;因为它涉及到数据传输和状态管理等关键部分。Apache Flink以其独特的方式来处理数据类型以及序列化&#xff0c;这种方式包括它…...

如何使用代理 IP 防止多个 Facebook 帐户关联 - 最佳实践

在社交媒体被广泛应用的今天&#xff0c;Facebook作为全球最大的社交网络平台之一&#xff0c;面临着很多挑战&#xff0c;其中之一就是用户行为的管理和安全。 为了防止多个账户之间的关联和滥用&#xff0c;Facebook需要采取一系列措施&#xff0c;其中包括使用静态住宅代理…...

DDei在线设计器-API-DDeiAbstractShape

DDeiAbstractShape DDeiAbstractShape代表是所有可见图形的父类&#xff0c;定义了图形所需要的公共属性和方法。   DDeiAbstractShape实例包含了一个图形的所有数据和渲染器&#xff0c;在获取后可以通过它访问其他内容。DDeiAbstractShape中的layer指向所在图层,stage指向所…...

IPython的使用技巧整理

关于IPython的使用技巧有很多&#xff0c;这里只是梳理了几个常用的以及我目前遇到过的&#xff0c;其他的技巧还没使用过&#xff0c;所以就没有列出来。 01|Tab键自动完成:在shell中输入表达式时&#xff0c;只要按下Tab键&#xff0c;当前命名空间中任何与已输入的字符串相…...

vue项目纯前端实现导出pdf文件

1、下载插件 npm install html2canvas npm install jspdf2、创建htmlToPdf.js&#xff0c;地址&#xff1a;src/utils/htmlToPdf.js import html2Canvas from html2Canvas import JsPDF from jspdf export default { install(Vue, options) { Vue.prototype.getPdfFromH…...

以Bert训练为例,测试torch不同的运行方式,并用torch.profile+HolisticTraceAnalysis分析性能瓶颈

以Bert训练为例,测试torch不同的运行方式,并用torch.profileHolisticTraceAnalysis分析性能瓶颈 1.参考链接:2.性能对比3.相关依赖或命令4.测试代码5.HolisticTraceAnalysis代码6.可视化A.优化前B.优化后 以Bert训练为例,测试torch不同的运行方式,并用torch.profileHolisticTra…...

地球地图:快速进行先进土地监测和气候评估的新工具Earth Map

地球地图:快速进行先进土地监测和气候评估的新工具 这个工具是居于GEE 开发的多功能的一个APP应用,主要进行土地监测和气候评估 Earth Map 什么是地球地图? 地球地图是联合国粮食及农业组织(粮农组织)在粮农组织与谷歌合作框架内开发的一个创新、免费和开放源码的工具。…...

6.22套题

B. Dark 题意&#xff1a;每次能在数列中能使相邻两个数-1&#xff0c;求当数列没有连续非0值的最小贡献 解法:设表示前i个数中前i-1个数是否为0&#xff0c;当前数是j的最小贡献。表示i1以后减掉d的最小贡献。 C. 幸运值 D. 凤凰院真凶...

openEuler搭建hadoop Standalone 模式

Standalone 升级软件安装常用软件关闭防火墙修改主机名和IP地址修改hosts配置文件下载jdk和hadoop并配置环境变量配置ssh免密钥登录修改配置文件初始化集群windows修改hosts文件测试 1、升级软件 yum -y update2、安装常用软件 yum -y install gcc gcc-c autoconf automake…...

nginx更新https/ssl证书的步骤

一、上传nginx证书到服务器 上传步骤略。。。 二、更新证书 &#xff08;一&#xff09;确认nginx的安装目录 我这里的环境是/etc/nginx/ &#xff08;二&#xff09;确认nginx的证书目录 查看/etc/nginx/nginx.conf&#xff0c;证书目录就在/etc/nginx目录下 将新的证书tes…...

【Android面试八股文】说一说Handler的sendMessage和postDelay的区别?

文章目录 一、`sendMessage` 方法1.1 主要用法1.2 适用场景二、`postDelayed` 方法2.1 主要用法2.2 适用场景三、 区别总结3.1 区别3.2 本质上有差别吗?四、实例对比4.1 使用`sendMessage`4.2 使用`postDelayed`五、结论Handler类在Android中用于消息传递和任务调度。 sendMe…...

Java学习 - Redis主从复制

主从复制是什么 用于建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库 主从复制的作用 数据备份读写分离 主从复制使用方式 通过slaveof命令 创建从节点 redis-slave> slaveof 127.0.0.1 6379取消从节点 redis-slave> slaveof no one通过配置 配置…...

图的拓扑排序

图的拓扑排序&#xff08;Topological Sorting&#xff09;是一种线性排序&#xff0c;用于有向无环图&#xff08;Directed Acyclic Graph&#xff0c;DAG&#xff09;。拓扑排序将图中的顶点排成一个线性序列&#xff0c;使得对于每一条有向边 (u, v)&#xff0c;顶点 u 都排…...

windows USB 设备驱动开发-总章

通用串行总线 (USB) 提供可扩展的即插即用串行接口&#xff0c;确保外围设备的标准、低成本的连接。 USB 设备包括键盘、鼠标、游戏杆、打印机、扫描仪、存储设备、调制解调器、视频会议摄像头等。USB-IF 是一个特别兴趣组 (SIG)&#xff0c;负责维护官方 USB 规范、测试规范和…...

springboot解析自定义yml文件

背景 公司产品微服务架构下有十几个模块&#xff0c;几乎大部分模块都要连接redis。每次在客户那里部署应用&#xff0c;都要改十几遍配置&#xff0c;太痛苦了。当然可以用nacos配置中心的功能&#xff0c;配置公共参数。不过我是喜欢在应用级别上解决问题&#xff0c;因为并不…...

【C/C++】静态函数调用类中成员函数方法 -- 最快捷之一

背景 注册回调函数中&#xff0c;回调函数是一个静态函数。需要调用类对象中的一个成员函数进行后续通知逻辑。 方案 定义全局指针&#xff0c;用于指向类对象this指针 static void *s_this_obj;类构造函数中&#xff0c;将全局指针指向所需类的this指针 s_this_obj this…...

佣金的定义和类型

1. 佣金的定义 基本定义&#xff1a;佣金是指在商业交易中&#xff0c;代理人或中介机构为促成交易所获得的报酬。它通常是按交易金额的一定比例计算和支付的。支付方式&#xff1a;佣金可以是固定金额&#xff0c;也可以是交易金额的百分比。 2. 佣金的类型 销售佣金&#…...

python数据分析实训任务二(‘风力风向’)

import numpy as np import matplotlib.pyplot as plt # 数据 labelsnp.array([东风, 东北风, 北风, 西北风, 西风, 西南风, 南风, 东南风]) statsnp.array([2.1, 2, 0, 3, 1.5, 3, 6, 4]) # 将角度转换为弧度 anglesnp.linspace(0, 2*np.pi, len(labels), endpointFalse).toli…...

Java技术栈总结:数据库MySQL篇

一、慢查询 1、常见情形 聚合查询 多表查询 表数据量过大查询 深度分页查询 2、定位慢查询 方案一、开源工具 调试工具&#xff1a;Arthas运维工具&#xff1a;Prometheus、Skywalking 方案二、MySQL自带慢日志 在MySQL配置文件 /etc/my.conf 中配置&#xff1a; # …...

vue-cli 项目打包优化-基础篇

1、项目打包完运行空白 引用资源路径问题&#xff0c;打包完的【index.html】文件引用其他文件的引用地址不对 参考配置&#xff1a;https://cli.vuejs.org/zh/config 修改vue.config.js &#xff0c;根据与 后端 或 运维 沟通修改 module.export {// 默认 publicPath: //…...

24/06/26(1.1129)动态内存

strtok 字符串分割函数 #include<stdio.h> int main(){ char str[] "this,a sample string."; char* sep ","; char* pch strtok(str, sep); printf("%s\n", pch); while (pch ! NULL){ printf("%s\…...

基于 elementUI / elementUI plus,实现 主要色(主题色)的一件换色(换肤)

一、效果图 二、方法 改变elementUI 的主要色 --el-color-primary 为自己选择的颜色&#xff0c;核心代码如下&#xff1a; // 处理主题样式 export function handleThemeStyle(theme) {document.documentElement.style.setProperty(--el-color-primary, theme) } 三、全部代…...

js 计算某个日期加月份最后月份不会增加或者跳变

/** * * param {*} dateString 原来日期 2023-12-31 * param {*} months 加月份 2 * returns 2024-02-29 */ export function getDateByMonth(dateString, months0) { console.log(1); let oldMonths dateString.substring(0,7); let day dateString.substring(8); let …...

Git简介与详细教程

一、简介 什么是Git&#xff1f; Git是一款分布式版本控制系统&#xff0c;由Linux之父Linus Torvalds于2005年开发。它旨在快速、高效地处理从小型到大型项目的所有内容。Git与传统的版本控制系统相比&#xff0c;具备显著的优势&#xff0c;主要体现在其分布式架构、强大的…...

创建OpenWRT虚拟机

环境&#xff1a;Ubuntu 2204&#xff0c;VM VirtualBox 7.0.18 安装必备软件包&#xff1a; sudo apt update sudo apt install subversion automake make cmake uuid-dev gcc vim build-essential clang flex bison g gawk gcc-multilib g-multilib gettext git libncurses…...

智慧安防新篇章:如何科学设定可燃气体报警器校准检测周期

随着科技的快速发展&#xff0c;智慧安防系统已成为现代社会不可或缺的一部分。在各类安全监测设备中&#xff0c;可燃气体报警器因其对潜在危险的及时预警功能而备受关注。 接下来&#xff0c;佰德将围绕可燃气体报警器的校准检测周期进行深入探讨&#xff0c;以确保其在智慧…...

如何优化Spring Boot应用的启动时间

如何优化Spring Boot应用的启动时间 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将讨论如何优化Spring Boot应用的启动时间&#xff0c;提升应用的性…...

(Effective C) 2.3 作用域

(Effective C) 2.3 作用域 文章目录 (Effective C) 2.3 作用域前言&#x1f522;4大作用域1️⃣文件作用域2️⃣块作用域3️⃣函数原型作用域4️⃣函数作用域 ⭐作用域性质&#x1f4d6;实例CodeEND关注我 前言 作用域应用于标识符的某个特定声明。 标识符包含对象&#xff0…...

Python 基础 (标准库):堆 heap

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构&#xff08;concrete data structures&#xff09;&#xff1b;优先级队列 priority queue 是一种抽象的数据结构&#xff08;abstract data structures&#xff09;&…...