自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(187)
  • 收藏
  • 关注

原创 Unity顶点动画的阴影实现

Unityshader入门精要中的顶点动画广告牌部分阴影实现

2022-06-10 22:57:05 712 1

原创 Unity-Shader创建用于环境映射的立方体纹理

一般来说,在yunity5中有三种创建用于环境映射的立方体纹理的办法通过特殊纹理直接生成手动创建Cubemap资源,再准备六张纹理图,依此赋值通过脚本生成第一种,需要准本一张特殊布局的纹理,比如立方体的立体展开图第二种,这种方法是unity5之前的版本中使用的方法,需要再项目中创建一个Cubemap,然后六张纹理拖进去即可第三种:前面两种是直接准备好立方体的纹理图像,但是符合我们需求的是通过物体在场景中的位置自动生成对应的不同立方体纹理,代码如下:using UnityEngine;usin

2022-05-27 16:10:19 682

原创 Unity性能优化之内存管理的优化(内存管理性能增强之预制池)四

预制池系统首先需要知道预制池系统需要做什么:如果已经存在已回收的版本,应该重新生成第一个可用的对象如果不存在已回收的版本,应该从预制体中实例化新的GameObject在上述两种情况下, 都应该在附加到GameObject上的所有IPoolableComponent接口上调用Spawned方法必须接受请求,以回收固定GameObject如果对象由对象池系统管理,他应该禁用,并在附加到GameObject上的所有IPoolableComponent接口类上调用Despawned方法如果对象没有由

2022-01-13 21:11:55 3259

原创 Unity性能优化之内存管理的优化(内存管理性能增强之对象池)三

对象池谈到临时工作缓冲区,对象池是通过避免释放和重新分配,来最小化和建立对内存使用控制的一种极好的方法,其理念是为对象创建建立自己的系统,它隐藏了所得的对象是新分配的还是从之前的分配中回收的,描述这个过程的典型术语是生成和回收对象,而不是在内存中创建和删除对象,当一个对象被回收的时候,只是隐藏它,使他休眠,直到再次需要它,此时它从之前的一个已回收对象中重新生成,并且来代替可能需要新分配的对象;接下来 介绍一下对象池系统的快速实现。该系统的重要特性是允许池化对象决定当需要回收时应该如何回收。下面IPoo

2022-01-13 12:30:11 2381

原创 Unity性能优化之内存管理的优化(内存管理性能增强)二

上一篇将关于字符串以及值类型引用类型的性能增强大致说完,下面继续关于装箱那点事C#中的一切皆是对象,这意味着他们都继承自System.Object类,甚至int、float、bool等基本数据类型,都隐式的从System.Object中继承,每当这些值类型以处理对象的方式隐式的处理时,CLR会自动创建一个临时对象来存储或装箱内部的值,以便将其视为典型的引用类型对象,显然这将会导致堆分配,以创建包含的容器;注意:装箱和将值类型作为引用类型的成员变量不同,装箱仅在通过转化或强制转化将值类型视为引用类型的时

2022-01-12 13:54:45 2274

原创 Unity性能优化之内存管理的优化(内存管理性能增强)一

关于Unity的代码编译当修改了C#代码,并且从喜欢的IDE切换到Unity之后,代码会自动编译,但是C#代码没有直接转化为机器码,相反,代码转换为中间语言CIL,他是本地代码上的一种抽象,这正是.NET支持多种语言的方式——每种语言都使用不同的编译器,但是他们都会转换成CIL,因为不管选择的语言是什么,最终的输出都是一样的;在运行的时候,CIL通过Mono的虚拟机VM运行,VM是一种基础架构元素,允许相同的代码运行在不同的平台,而不需要修改代码本身,Mono虚拟机时.NET公共语言运行时(CLR)的一

2022-01-10 18:11:15 1546

原创 Unity性能优化之内存管理的优化(Mono平台下的内存管理)

此部分分为以下几个环节来记录Mono平台本地和托管内存域垃圾回收内存碎片IL2CPP如何分析内存问题不同内存祥光性能增强最小化垃圾回收正确使用值类型和引用类型正确使用字符串与unity引擎相关的许多潜在增强对象和预制池Mono平台Mono是一种神奇的调味汁,使Unity具有很多跨平台的功能,其目标使通过框架提供跨平台开发,该框架允许用统用的编程语言编写代码运行在不同的硬件平台上,包括 Linux、MacOS、Windows、ARM等,Mono甚至支持很多不同的编程语言,可

2022-01-09 11:16:54 1849

原创 Unity性能优化之图形渲染(渲染性能的加强)

上一篇博客已经讲述了关于性能瓶颈的所有信息,现在就可以根据这些信息进行针对性的性能修复了,下面将介绍一系列技术来提升CPU受限和GPU受限程序的渲染管线渲染性能问题;启用/禁用GPUSkinning第一个技巧就是通过GPUSkinning来降低CPU或者GPU前端的负载,Skinning是基于动画骨骼的房前位置变化网格顶点的过程,在CPU上工作的系统会转化对象的骨骼,用于确定其当前的姿势,但是动画过程中的下一个重要步骤是围绕这些骨骼包裹的网格顶点,将网格放在最终的姿势中,为此需要迭代每个顶点,并对连接到

2021-12-25 15:55:04 4209

原创 Unity性能优化之动态图形渲染

毫无疑问的,现代图形设备的管线渲染非常复杂,即使在屏幕上仅仅渲染一个最简单的三角形,也要执行大量的API,其中包含了很多任务,如:为挂接到操作系统的相机视图创建缓冲区;为顶点数据分配缓冲区;建立数据通道以将顶点和纹理数据从RAM传送到VRAM,配置这些内存空间来使用一组特定的数据格式;确定对相机可见的对象;为三角形设置并初始化DrawCall;等待渲染管线完成其任务;最后将渲染的图像显示到屏幕上;虽然绘制这样一个简单的对象方法开起来过于复杂,理由是,渲染常常需要重复这样的任务,不管是渲染复杂的任务还是简单

2021-12-21 17:19:57 2455

原创 Unity性能优化之物理引擎的优化(布娃娃的优化)

说到基于关节的物体,布娃娃使非常受欢迎的特性,但是即使允许多个布娃娃同时在场景中共存使非常有人的事情,但是当有太多布娃娃在运动或者与其他对象碰撞的时候,由于迭代器需要很高的迭代次数来解决这些问题,这就会带来巨大的性能损失,所以接下来讨论一下提高布娃娃性能的方法;减少关节和碰撞器Unity 在GameObject->3DObject->Ragdoll…下提供了简单的布娃娃生成工具,该工具可以从给定的对象中生成布娃娃,直接将给定对象的对应部位拖到上面既可以了这个工具通常创建13个不同的碰撞器

2021-12-20 16:21:26 1217

原创 Unity性能优化之物理引擎的优化(三)

继续上两篇的博客前两篇博客分别介绍了unity中物理引擎的大部分物理特性和部分优化技术用于提升游戏的物理性能,接下来继续玩完善用于提升游戏物理性能的优化技术;最小化涉嫌发射和边界体积检查所有的射线投射方法都很有用,但是他们相对于其他地方来说消耗太大,特别是CapsileCast 和SphereCast方法,应该避免在Update中定期的调用这些方法,并且只在脚本代码的管...

2021-12-20 15:55:03 2460

原创 Unity性能优化之物理引擎的优化(二)

继续上一篇博客上一篇博客已经讲述了unity中物理引擎的大部分物理特性,接下来介绍一些优化技术用于提升游戏的物理性能!物理性能优化场景设置缩放应该尽可能的将游戏世界的所有物理物体的缩放接近(1,1,1),默认情况下,unity假设试图模拟的游戏玩法相当于在地球表面,地球表面的重力为9.81m/s2,因此默认重力值设置为-9.81以匹配地球重力,unitu世界空间的一个单位等于1米,负号意味着他会把物体向下拉,物体的大小应该反应有效的世界尺度,因为缩放过大会导致重力移动物体的速度要比预期的慢得多,如

2021-12-19 21:14:28 1007

原创 Unity性能优化之物理引擎的优化(一)

由于物理引擎是一类独特的子系统,其行为和一直性是影响产品质量的主要因素,因此花时间改进其行为通常是值得的;如果错过了重要的碰撞事件,游戏在计算的复杂物理事件时卡顿,或者玩家摔倒在地上,这些都将会对游戏质量产生明显的负面影响;下面将介绍减少物理迎请中的CPU峰值、开销和内存消耗的方式,在提高或者至少保持游戏质量的同时优化性能;将以如下的顺序介绍;理解Unity的物理引擎时如何工作时间步长和FixedUpdate碰撞器类型碰撞射线发射刚体激活状态物理引擎性能优化如何以优化物理行为构建

2021-12-19 15:59:19 2864

原创 Unity性能优化之网格和动画文件

实际上,网络和动画文件的这些文件类型是顶点和蒙皮骨骼数据的大型数组,可以通过各种技术最小化文件大小,同时缺不影响外观的相似性,与此同时,也有一些方式可以通过批处理技术降低渲染大量的这类对象组的成本;优化之路;减少多边形数量调整网格压缩恰当的使用Read-Write Enabled合并网格Asset Bundle 和Resource减少多边形数量这是最有效的提升性能的方法之一,应该始终考虑这方面的优化,事实上,由于不能使用SkinnedMesh Render对对象进行批处理,因此,这是减少

2021-12-18 20:28:32 1390

原创 性能优化之纹理文件的优化

游戏开发中经常混淆纹理和精灵的概念,下面来简单的区分一下纹理:纹理只是简单的图像文件,一个拥有很多颜色数据的大列表,其作用是为了告知程序,图像的每个像素应该是什么颜色;精灵:精灵是网格的2D等价物,通常只是一个四边形,(一对三角形合并成的网格),其作用是来渲染面向当前相机的平面;精灵表:另一种被称之为精灵表的事物,它是在一个纹理文件内大量独立图像的几何,通常用于包含2D动画,以上的这三种文件可以使用工具进行切分,比如,unity的sprite Atlas,用来形成角色动画帧所需要的独立纹理;网格或

2021-12-17 18:44:21 1161

原创 性能优化之艺术资源的优化(音频资源)

音频导入音频文件加载音频文件编码格式与品质级别音频性能加强导入音频文件在Project窗口中选中导入的音频文件的时候,Inspector窗口将显示多个导入设置,这些设置决定了加载行为、压缩行为、质量、采样率、以及是否支持双音道很多音频的导入选项中可以基于每个平台的配置,允许在不同的目标平台上进行自定义的行为加载音频文件Preload Audio Data 巨顶音频数据是在场景初始化期间自动加载还是在以后加载Load In BackGround 确定此加载活动是在完成之前阻塞主线程还

2021-12-16 16:05:30 882

原创 unity性能优化之批处理的优势

在某些情况下,批处理的对象指的是网格、顶点、边、UV坐标和其他用于描述3D对象的不同数据类型的大集合,当然该术语也可以简单的代表批处理音频文件、精灵、纹理文件和其他大数据的集合批处理的两种形式静态批处理动态批处理这两种方法的最本质区别就是集合体合并的两种不同的形式,用于将多个对象的网格数据合并到一起,并且在单一的指令中去渲染他们,而不是单独准备和回值每个几何体。为什么可以将多个网格进行批处理成单一的网格?Unity中并没有规定网格对象必须是3D空间中的连续集合体,并且,Rendering p

2021-12-14 22:11:49 775

原创 unity性能优化之关于脚本的优化与注意事项

写在前面:本文所述脚本优化就是多使用那种方式,尽量不要使用那种方式,那种方式会浪费资源,以及为什么会浪费资源,某些高效率的框架以及系统是怎样制作的使用最快的方式获得组件通常情况下,我们获取组件的方式中,最常用的方法之一就是GetComponent,但是GetComponent有几种变体,这几种变体的执行效率是不一样的,分别有GetComponent、GetComponent(string)、GetComponent(typeof(T)) ,这几种变体是有效率区别的,通过简单测试(网上也有很多测试结果)显

2021-12-13 15:46:35 2337

原创 Unity性能优化之unity profiler

Unity profiler 所能收集到的内容CPU消耗量(包括每一个子系统)基本、详细的渲染和GPU的信息运行时内存的分配和总消耗量音频/数据的使用情况物理引擎(2D\3D)的使用情况网络消息传递和活动情况视频回放的使用情况基本和享系的用户界面性能全局光照同继数据常用的使用profiler的方法指令注入:所谓的指令注入就是通过代码开启一个指令命名,然后在目标函数前开启,目标函数结束关闭,以此来观察目标函数的行为(后面会说到),这里面可能包括,调用次数、总共的执行时间、分配了多少

2021-12-11 14:44:57 7576

原创 C#全局消息传递系统 注意事项与基础实现

首先:要实现某个系统,首先要考虑是否再场景中我们只希望其存在一个就够了?显而易见,全局的消息传递系统就是这样的一个东西,因此需要将其做成单例;既然有单例就要用到上一文说到的,防止单例释放以后,还有脚本试图调用单例的方法,从而导致在游戏结束的时候,单例依然存在的情况; 不同的消息都需要可以处理,因此所有的消息类型应该有一个共同的基类,暂且叫做Message(所有消息类型的基类);既然要处理消息,那么消息触发的时候,就要有方法去处理,但是现在来看,我们是需要一个统一的格式来定义方法,因此这里使用委托;其次:思

2021-11-15 15:55:47 1393

原创 C#单例实现与注意问题

首先简单的说一下什么是单例,单例就是在整个程序的运行期间,存在且只存在一个的管理者,如你制作一个售卖系统,关于交易资金,你是希望有多个部分模块来管理这一个功能还是说仅通过一个交易单例来同意管理呢,如在制作游戏中,你是希望有多个敌人的管理者还是说,不管什么类型的敌人,全部都交给一个EnemyManager来生成与销毁呢?,那么整个交易单例和EnemyManager就是前面提到的单例,所谓的单例模式也就是使用了单例的情况,比如你使用单例来制作了EnemyManager ,那么实际上你就已经在使用单例模式了!使

2021-11-09 16:53:18 2075 1

原创 版本管理之使用TortoiseGit将将自己的项目上传到gitee上

首先你要下载TortoiseGit,网上有很多教程然后在gitee上面注册账号注册完账号之后新建仓库复制仓库地址在自己的电脑上新建一个文件夹在新建文件夹内右键选择Git clone,在弹出的界面中将刚刚复制的地址放上去输入账户名与密码 ,就可以把远程仓库克隆到本地了将自己的项目放在这个文件夹内,在文件夹内右键点击Git commit ->master,选择All ,并添加上版本描述点击提交最后一步点击push ,就可以在gitee上面看到你的项目了如果不想每次提交都输入.

2021-06-09 19:41:45 641

原创 Xlua之Bundle构建工具创建

Bundle构建工具Budle Build策略按文件夹打包1)优势:budle数量少,小包模式,首次下载快2)劣势:后期更新的时候,更新补丁大,即使一个budle中只有一个资源发生了改变,也要全部更新整个budle包按文件打包(推荐)1)优势:更新补丁小2)劣势:小包模式:首次下载稍慢由于打bundle 的功能是编辑器下面的功能,因此要放在Editor文件夹下面进Bundle 工具构建的流程首先要明确的是,打包的数量为1-*个, 因此先创建一个存储bundle的数组或者列.

2021-06-09 14:06:15 321 1

原创 mmorpg小地图系统制作

最终效果如下箭头会随着任务的移动、旋转而发生移动与旋转,当角色切换到另外的地图中时,相应的地图名称也会发生变换,如布鲁镇变成落日森林;制作流程小地图的资源制作方式实时渲染场景:主要是有一个摄像机,它真实的存在于角色的上空,然后显示在小地图上面(通过实时的渲染显示场景,非常精准写实);预渲染顶视图+润色:将场景的顶视图先预渲染到一张图片上面,然后由美工进行润色(unity中使用mask充当遮罩,可以取消 showMaskfraphic来将遮罩剔除)纯每输制作,通过手绘的方式,将场景中的建筑,

2021-06-01 16:44:24 452

原创 unity shader——渲染流水线

文章目录1:什么是流水线:2:什么是渲染流水线:应用阶段:应用阶段有三个主要任务 (在CPU上运行)几何阶段(在GPU上执行)光栅化阶段(在GPU上执行)CPU和GPU之间的通讯1. 将所需数据加载到显存中2. 设置渲染状态3. 调用Draw Call(图像编程接口)GPU流水线(千万要把渲染流水线和GPU流水线分开呀)几何阶段顶点着色器(完全可以编程)曲面细分着色器几何着色器剪裁屏幕映射光栅化阶段三角形设置三角形遍历片元着色器逐片元操作问题CPU和GPU如何并行工作的为什么DrawCall多了会影响效

2021-05-04 19:58:59 290

原创 c++面经汇总(计算机网络2)

请问TCP三次握手是怎样的首先:客户端发送同步信号SYN = 1、seq = x到服务端服务端收到之后,SYN= 1,seq = y、ack = x+1到客户端客户端收到之后,SYN = 1、ack = y+1到服务端,连接建立TCP握手为什么两次不行,为什么不用四次首先来分析一下握手的过程A发送同步信号SYN 与seq序号B收到后返回ACK确认序号B收到后返回seq和SYNA收到后返回ACK实际上是通过上面四步走的但是23是可以合并的,因此实际上是三次握手,那么如果四

2021-04-28 11:01:53 132

原创 c++面经汇总(计算机网络)

请你说一下TCP是怎样保证可靠连接的,并且简述一下TCP建立连接和断开连接的过程TCP保证可靠连接有三个条件序列号、确认应答、超时重传:当客户端的数据到达发送方的时候,发送方需要发出一个确认应答,表示已经接收到该数据段,并且确认序号会说明它下次需要接收的数据序列号,如果发送方没有收到应答确认,那么可能是在发送的过程中有数据丢失的现象,也可能是确认应答丢失,这是发送方会等待一段时间之后,进行重传,一般是等待2*往返事件+一个偏差值窗口控制:TCP会利用窗口控制来提高运输速度,意思是在一个窗口大小内,不

2021-04-26 20:48:34 387

原创 c++面经整理(操作系统 协程、协程与线程、系统调用、fork实例、微内核与宏内核、僵尸进程、IO模型、异步编程的事件循环、page cache)

说一说协程顾名思义,携程就是协助主城的运行,携程,又称微线程,虽然携程看上区也是子程序,但执行过程中,在子程序内部可以中断,然后转而实现执行别的子程序,在适当的时候再返回执行;协程和线程的区别:和多线程相比,协程最大的优势就是携程的执行效率,由于子程序切换不是线程切换,而是由程序自身的控制,因此,协程并没有线程切换时的开销,和多线程相比,线程数越多,协程的性能优势就越明显第二大优势就是不需要多线程的锁机制,因为只有一个线程,因为只有一个线程,也不存在同时写变量冲突,在协程中控制的资源不加锁,只需要

2021-04-26 09:43:16 279

原创 c++面经汇总(操作系统 互斥锁机制以及互斥锁和读写锁的区别、进程状态转换(动态就绪、静态就绪、动态阻塞、静态阻塞)软链接、硬链接、大端小端、用户态和内核态、死锁产生的必要条件、内存溢出和内存泄漏线

请你讲述一下互斥锁机制,以及互斥锁和读写锁的区别互斥锁用来保证在任何时刻,都只能有一个线程访问该对象,当获取锁操作失败时,线程会进入睡眠,等待锁释放时唤醒。读写锁:读写锁分为读锁和写锁,处于读的操作时,可以允许多个线程同时获得读操作,但是同一个时刻只能有一个线程可以获得写锁,当获得写锁失败时,线程进入睡眠状态,一直到写锁释放时被唤醒写锁会阻塞其他读写锁(当有一个线程获取到写锁时,读锁也不能被其他线程所获取)写锁优先于读(一旦有写者,后续的读者必须进行等待,唤醒时优先考虑写)非常适用于读数据频率远大于写

2021-04-25 18:24:06 1339 4

原创 c++面经汇总(操作系统)

说一下进程与线程的概念,以及为什么要有进程和线程,他们各自又是怎样同步的基本概念:进程是对运行时程序的封装,是操作系统进行资源调度和分配的基本单位,实现了操作系统的并发线程是进程的子任务,是cpu调度和分派的基本单位,实现了进程内部的并发;线程是操作系统可以识别的最小执行单位和调度单位,每个线程完成不同的任务,但是线程之间共享同一内存单元;区别进程是操作系统进行资源调度和分派的基本单位,一个进程可以拥有多个线程,多个线程实现了进程内部的并发一个线程只能属于一个进程,线程是依赖进程而存

2021-04-22 20:59:30 724 1

原创 unity生命周期函数执行顺序

Reset->Awake->OnEnable->start->FixedUpdate->OnTrigger->OnCollision->Update->yield return->LateUpdate->OnGUI->OnDisable->OnDestory

2021-04-22 09:33:47 3570

原创 c++面经知识汇总(编译与底层、结构体内存对齐计算问题)

c++中什么是右值引用,什么是左值引用,有什么区别c++引用、移动、转发1.右值与左值:在c++中所有的值必然都属于右值、左值之一,所谓的左值就是在表达式结束以后依然持久存在的值或对象,而右值则是指表达式结束时就不再存在的临时变量,所有具有变量或者对象都是左值,右值并不具名一个可以区分左值和右值的便捷方法:看看能不能对表达式取地址,如果可以,为左值,如果不行,为右值2. 左值引用、右值引用 :所谓的左值引用就是给某个变量取了一个别名,右值引用关联到右值时,右值被存储到特定位置,右值引用指向该特定位置,

2021-04-21 17:12:20 133

原创 c++面经知识汇总(STL中迭代器的作用、类成员的访问权限、struct和class的区别,类中定义应用数据成员)

STL中的迭代器有什么作用,为什么有指针之后还要使用迭代器首先,迭代器的具有提供一种方法,可以顺序的访问容器中的对象,但是有又不会暴露底层内部表示。迭代器和指针的区别:迭代器不是指针,它是一种类模板,虽然他模拟了指针的一些功能,如重载了++、–等,迭代器封装了指针,他其实是一个可以遍历STL中全部元素的对象,它可以适应任何类型,也可以根据不同的类型来实现++、-- 等操作;迭代器返回的是对象的引用,而不是对象的值;产生迭代器的原因就是,可以通过迭代器,不在意类型的区别,同样也不用暴露内部的

2021-04-21 08:43:44 268 1

原创 c++面经知识汇总(顺序容器、关联容器、STL的组成部分以及作用,容器删除元素导致迭代器失效)

请来说一下map和set的区别,分别是怎么实现的map和set都是c++的关联容器,而且其底层都是通过红黑树实现的;map中的元素是成对出现的key-value ,关键字起到索引的作用,值则表示与索引相关联的数据;set中的元素就是关键字的集合,每个元素值包含一个关键字set的迭代器是const的,不允许修改元素的值,map允许修改value但是不允许修改key,原因是因为map、set都是通过关键字来保证其有序性,map支持下标操作,set不支持下标操作,map可以用key做下标,map的下标运

2021-04-20 21:11:57 303

原创 c++面经知识汇总(虚函数怎样实现多态、函数调用、处理函数返回值、malloc和new的区别)

请说一下虚函数表具体是怎样实现多态的在基类中,如果有虚函数,那么会生成一个虚函数表,表中保存的是虚函数的地址,当其被派生的时候,派生类会继承这个虚函数表,如果派生类中重写了基类的虚函数,那么在其虚函数表中的对应函数地址会修改称自己的虚函数地址,当进行调用的时候,对象首先是通过虚表指针找到虚函数表,然后通过虚函数表中的函数地址,找到对应的虚函数进行调用,通过这种机制实现运行时多态函数是怎样进行调用的在程序的运行期间,会为每一个函数调用分配函数栈,在栈内进行函数的逻辑过程,在使用之前,先把函数的返回地址压

2021-04-20 17:37:48 138

原创 c++面经基础知识汇总(类型转换、new/delete/malloc/free、什么是RTTI)

如果同时定义了两个函数,一个带const,一个不带,会有问题吗不会,相当于函数重载什么是隐式转换在c++中,不会将两个不同类型的值相加,而是先根据类型转化规则,设法将运算对象统一之后,再求值,上述的类型转化是自动执行的,不需要程序员介入,因此被称作隐式转化隐式转换发生的时机:大多数情况下,比int小的整型将会转化为较大的整数类型在条件中,非布尔类型转换为布尔类型在初始化的过程中,初始值转换为变量类型算数转换:一般来说,会将较小的算数类型转换为较大的算数类型,如int转换为double

2021-04-20 17:06:00 116 2

原创 c++面经知识汇总(虚函数、析构函数、fork)

为什么基类析构函数必须使虚函数,为什么c++默认的析构函数不是虚函数当某个类被继承的时候,根据替换原则,可以使用派生类替换基类对象,当释放的时候如果不将基类的析构函数声明为虚函数的话,编译器只会释放基类的对象资源,但是实际上我们建立的是子类对象,想要释放的也是子类对象,所以应该把基类的析构函数声明成虚函数,子类去重写,这样就可以动态的检测到底是什么对象需要被析构,从而可以正确的析构我们想要析构的对象;如果某个类并不需要被继承,那么其析构函数不必要声明成虚函数,为什么声明成虚构函数在上面已经解释,但是需要

2021-04-20 15:03:15 264

原创 c++动态内存与智能指针

在c++中,动态内存的管理是用过一对运算符来完成的,new在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以对这个对象进行初始化;delete,接受一个动态对象的指针,销毁该对象,并且释放与该对象关联的内存动态内存的使用非常容易出现问题,因为确保在正确的时间释放内存是及其困难的事情,有时我们会忘记释放内存,这种情况下就会导致内存泄漏,还有的时候,在还有某个指针引用内存的情况下,我们就释放了他,这种情况下,就会出现非法指针因此,为了应对上述情况,更加安全的使用动态内存,新的标准库提供了以下智能

2021-04-20 10:46:41 111

原创 c++面经基础知识汇总(1)(static、强制转换、指针和引用的区别、智能指针、数组与指针的区别)

c++中static关键字的作用static是用来声明静态变量、静态函数、类的静态成员、类的静态函数等对声明静态变量来说共分为两种静态变量局部静态变量 :1. 在局部变量的前面添加上关键字static,局部变量就变成了局部静态变量;2. 局部静态变量在内存中位置是->静态存储区3. 初始化:任意4. 作用域: 局部静态变量的作用域,仍然是在局部的作用域,如,在一个函数中声明了一个静态变量,那么这个变量就是局部静态变量,当出了函数的作用范围之外,这个静态变量不能被使用,但是并没有被销毁,

2021-04-20 09:33:03 409

原创 c++内存的分配方式(堆、栈、代码区、静态存储区)

写在前面局部变量区即栈区;动态存储区,即堆(heap)区或自由存储区(free store);c++中程序占用的内存分为一下的几个部分栈区:一般存放的是值类型,由编译器自动分配、释放;存放的是函数的参数值,局部变量的值等,其操作方式类似数据结构的栈;堆:存在于堆中的数据一般是通过程序员进行主动释放,如果程序员没有主动释放,那么在程序结束的时候,由操作系统进行回收,如那些由new分配的内存块,他们的释放,编译器并不管,而是通过程序员释放(delete),如果程序员没有释放掉,那么程序结束之后,操作系

2021-04-19 19:47:24 1007

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除