内联函数与动态内存分配

news2024/11/17 16:18:11

内联函数

调用普通函数的问题:

          每个普通函数调用语句都需要发生跳转操作,这种跳转操作会带来时间开销

联就是用 函数已被编译好的二进制代码 替换 对该函数的调用指令
联在保证函数特性的同时,避免了函数 调用的时间开销

 

 总结

1.内联会使可执行文件的体积和进程代码的内存变大,因此只有频繁调用的简单函数才适合内联
2.inline关键字仅表示期望该函数被优化为内联,但是否适合内联则完全由编译器决定
3.稀少被调用的复杂函数和递归函数都不适合内联

 代码演示

//内联函数:编译器的优化策略
#include<iostream>
void foo(int x){    //普通函数
    cout << "foo(int):" << x << endl;
}
inline void bar(int x){ //内联函数
    cout << "bar(int):" << x << endl;
}
using namespace std;
int main(){
    foo(10);  //生成跳转指令,调用函数
    foo(20);  //..........
    foo(30);  //..........

    bar(10);  //将此处替换为bar函数编译后产生的二进制指令集,不生成跳转指令
    bar(20);  //..........
    bar(30);  //.........
    return 0;
}

动态内存分配

可以继续使用 标准 C 库函数 malloc /free
更建议使用 new / delete 操作符在堆中分配 / 释放内存
–> int * pi = new int ;
->delete pi;
在分配内存的同时 初始化
–> i nt * pi = new int (100);
以数组方式 new 的也要以 数组方式 delete
–> int * pi = new int [4] {10, 20, 30, 40};
->delete[ ] pi;
        当你申请这4个int类型大小的空间时,系统默认会多分配一个int类型大小,用来计数,存储当前数组元素个数。对于这4个字节的数据,系统拒绝用户对这块数据进行任何操作,用户可以获取这块空间的地址,但不能进行读写。在释放这个数组的空间时,指针会先进行减4字节的操作,从而连同多分配的这4字节数据一 起释放。                                                                                                                      
1.      通过new操作符分配N维数组,返回N-1维数组指针
                int (*prow)[4]= new int [3][4];
                int (*pparr)[4][5]= new int [3][4][5]
2.      不能通过delete操作符释放已释放过的内存
3.      delete野指针后果未定义,delete空指针安全
4.      new操作符申请内存失败,将抛出异常

代码演示 

//动态(堆)内存分配
#include <iostream>
#include<cstdlib>
using namespace std;
int main(){
    int* pm = (int*)malloc(4);
    cout << "*pm:" << *pm << endl;
    free(pm);

    int* pn = new int(100);//堆内存初始化为100
    cout << "*pn:" << *pn << endl;
    delete pn;

    int* parr = new int[4]{1,2,3,4};
    for(int i = 0; i < 4; i++){
        cout << parr[i] << ' ' ;
    }
    cout << endl;
    delete[] parr;
    int(*p)[4] = new int[3][4]; //动态分配二维数组
    delete[] p;
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2088857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Java以及Java的发展历程

Java是什么 搜索百度百科词条 Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地…

瞩“M”蓉城,驾趣“耍起” 全新BMW M5策马领衔,宝马集团13款新车闪耀成都车展

宝马秉持长期主义&#xff0c;以强大产品和创新体验&#xff0c;满足中国客户需求2024是BMW M大年&#xff0c;车型数量将扩至23款&#xff0c;几乎覆盖BMW所有细分市场全新BMW M5中国首秀&#xff0c;即将于今年年底上市 以“精简有道”融合性能美学与空气动力学&#xff0c;设…

实用好软-----电脑端 Kuvid工具 支持上千网站的视频下载软件

今天分享的这款软件支持很多网站视频下载 。全中文界面。操作比较简单。初步测试了下。下载B站视频操作方便 其他视频界面个别会解析错误。 软件主界面和相关设置界面 注意&#xff1a;设置中的自定义FFMPEG通常不需要开启,需要指定的路径是ffmpeg.exe的路径,不是所下载的安装…

2024高效获客转化指南 | 「人群模型」详解

营销进入“以人为本”的时代&#xff0c;小红书以其独特的UGC社区生态&#xff0c;在营销“人影响人”的传播链路中发挥着关键作用。 本期&#xff0c;千瓜就营销传播中“人”的研究展开探讨&#xff0c;通过解析人群模型、品牌案例&#xff0c;详细解读营销策略方法及应用&…

华为USG6625F设备ipsec隧道无IKE v1版本解决办法

新华为USG6625F防火墙&#xff0c;因需要和对端中心对接ipsec后发现无IKE V1版本&#xff0c;设备默认只有IKE v2版本&#xff0c;和对端对接隧道参数不一致&#xff0c;无法成功对接&#xff0c;因此需要下载相应的IKE v1插件后加载插件来解决该问题&#xff1b; USG6625F 版本…

Python自动化测试requests库深度详解

前言 发送HTTP请求 import requests# 登录的接口地址url http://............/login# 登录的参数params {"mobile_phone": 18300000000,"pwd": 12345678}# 请求头headers {X-Lemonban-Media-Type: lemonban.v2}# 发送登录请求# 请求类型为 Content-Typ…

《机器学习》 基于GANs构建数字图像生成器 探索深度学习世界

文章目录 引言生成对抗网络的基本原理生成对抗网络的数学表达生成对抗网络的应用生成对抗网络的挑战与优化生成对抗网络的实现示例结论&#xff1a;机器学习和ai技术的出现成为了C……SD……N 热榜的爹。 使用机器学习技术对热榜文章进行分析 引言 生成对抗网络&#xff08;Ge…

Training language models to follow instructionswith human feedback

Abstract 将语言模型做得更大并不会自动提高它们遵循用户意图的能力。例如&#xff0c;大型语言模型可能会生成不真实、有毒或对用户不有帮助的输出。换句话说&#xff0c;这些模型并未与用户对齐&#xff08;aligned&#xff09;。本文展示了一种通过人类反馈来对齐语言模型与…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

2024最新gewe开发微信机器人教程说明

简介&#xff1a;本文将指导你如何搭建一个微信机器人&#xff0c;通过接入gewe实现智能回复与聊天功能。我们将从基础设置开始&#xff0c;逐步讲解如何配置机器人&#xff0c;并通过实例展示其实际应用。 随着人工智能技术的不断发展&#xff0c;智能机器人已经成为我们日常…

RS®SMM100A 矢量信号发生器重新定义中档仪器

R&S SMM100A 矢量信号发生器 100 MHz至44 GHz 产品综述 R&SSMM100A 矢量信号发生器在 100 MHz 至 44 GHz 的频率范围内提供一流的射频特性。这款仪器覆盖现有无线标准所使用的 6 GHz 以下的频段、新定义的最高 7.125 GHz 的 5G NR FR1 和 Wi-Fi 6E 频段以及最高 44 …

C++竞赛初阶L1-14-第六单元-数组(31~33课)547: T456477 查找特定的值

题目内容 在一个序列&#xff08;下标从 0 开始&#xff09;中查找一个给定的值&#xff0c;输出第一次出现的位置。 输入格式 第一行包含一个正整数 n&#xff0c;表示序列中元素个数。1≤n≤10000。 第二行包含 n 个整数&#xff0c;依次给出序列的每个元素&#xff0c;相…

【微信小程序】SpringBoot集成微信小程序(多小程序集成)

SpringBoot集成微信小程序 前言一、前置工作1、获取appId和appSecret核心参数 二、SpringBoot集成微信小程序1、引入pom依赖2、yml配置3、java代码文件3.1、Properties 配置类3.2 Configuration 服务类 4、使用示例4.1、获取登录后的session信息&#xff1a;openId4.2、获取当前…

提升你的校招简历:推荐高质量C++项目示例!

Linux C/C开发&#xff08;后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全&#xff09;、QT开发、学习资料、教学视频和学习路线图&#xff0c;↓↓↓↓↓↓见下面文章底部点击学习资料领取↓↓↓↓↓↓ TinyTetris TinyTetris 是一个用不到 1024 字节的 C 语言代码编…

SWAP模型入门到精通:模拟土壤水分动态、溶质运输、土壤温度以及作物生长等过程

目录 专题一 SWAP模型介绍及数据要求 专题二 数据制备与模型运行 专题三 基于R模型敏感性分析与贝叶斯优化 专题四 基于Fortran源代码分析 专题五 气候数据降尺度与变化影响分析 专题六 AI大语言模型在建模中的应用 更多应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作…

泽众P-One如何测试https接口性能问题

P-One是泽众软件自主研发的一套一站式性能测试平台&#xff0c;集管理、设计、压测、监控以及分析于一体的全方位性能测试解决方案&#xff0c;有效提升了性能测试的技术能力和效率&#xff0c;降低了测试门槛和成本&#xff0c;同时提升了软件产品质量。本文将详细介绍如何使用…

Nuxt 项目实战 - 16:利用CDN+OSS给网站全面提速

背景 我面试过一些前端同学&#xff0c;同时也看到网上很多前端同学说可以利用CDN加速&#xff0c;提高网站的访问速度&#xff0c;具体如何搞&#xff1f;具体如何配置&#xff1f;估计很多前端都是不知道的&#xff0c;一方面权限所限&#xff0c;另一方面可能只是知道可以利…

Substance 3D Stager for Mac/Win:高效三维场景设计利器

Substance 3D Stager是Adobe推出的一款专为Mac和Windows用户设计的三维场景设计和渲染软件&#xff0c;它以其高效、直观的特点&#xff0c;在数字艺术、游戏开发、影视特效等领域赢得了广泛的认可。 核心功能 直观的操作界面&#xff1a;Substance 3D Stager提供了优秀的视觉…

智慧交通算法一体机助力城市交通智能管理,让违规行为无处遁形

背景分析&#xff1a; 随着社会的进步和科技的不断发展&#xff0c;互联网技术和AI视觉分析技术日益成熟&#xff0c;为传统交通监控领域带来了新的发展机遇。AI视觉分析技术的引入&#xff0c;不仅提升了交通监控的智能化和自动化水平&#xff0c;还显著减轻了交管部门的工作…

数据分析报告练习作业

该数据集为日本1960年到2022年间的基建领域的投资数据&#xff0c;包含以下特征&#xff1a; 年份 价值 总计 建筑总计 住宅建筑 政府住宅建筑 私人住宅建筑 非住宅建筑 政府非住宅建筑 私人非住宅建筑 私人非住宅建筑&#xff08;矿业和工业&#xff09; 私人非住宅建筑&…