面试题目搜集整理
面试题目:(偏基础~~,面试官说我内存管理掌握的不好,呜呜呜!凉)
答案来自Edag中的Copilot
-
如果帧率大于屏幕刷新率会出现怎么样子效果?帧率小于屏幕刷新率呢?
当帧率大于屏幕刷新率时,会出现画面撕裂的现象。这是因为显卡在生成画面时,会将一帧画面分成两个部分,分别显示在屏幕的不同位置上。如果帧率过高,就会出现两个部分之间的不协调,导致画面撕裂123。
当帧率小于屏幕刷新率时,会出现画面卡顿的现象。这是因为显卡在生成画面时,无法及时更新屏幕上的内容,导致画面出现停滞或卡顿的现象123。
为了避免这些问题,可以使用垂直同步(VSync)技术来将帧率与屏幕刷新率同步。VSync技术可以确保显卡在生成画面时,与屏幕的刷新速率保持一致,从而避免画面撕裂和卡顿的现象123。
希望这些解释能够帮助您更好地理解帧率和屏幕刷新率之间的关系。如果您还有其他问题,请随时问我!
-
什么是mipmap?
mipmap相当于贴图界的LOD!
Mipmap是一种提高游戏画面流畅度和解决走样问题的技术,它是将游戏世界中的贴图按照不同级别分组和缩放的方式显示。Mipmap是由一系列纹理组成的,每个纹理都是同一图像的逐渐降低分辨率的表示。每个级别的纹理的高度和宽度都是前一个级别的一半。Mipmap的作用是在不同距离和缩放级别下,使用不同分辨率的纹理来提高游戏画面的流畅度和质量。Mipmap技术可以避免锯齿状图形的出现,提高游戏画面的质量。Mipmap级别越高,对远处或者缩小的贴图会有更精确的表现。Mipmap级别调高会占用更多的显存,但对游戏画面的质量有所提升。如果您想了解更多关于Mipmap的信息,可以参考我在知乎上的一篇文章1。
-
什么是栈溢出,一个32G大小的内存和一个64G内存上运行一个递归调用自己空函数的区别?
32G大小的比64G的先溢出!
如果一个空函数调用自身,会导致无限递归,从而导致栈溢出错误。每次函数调用都会在栈中分配一 块内存用于存储这些信息,当递归层级太深时,栈的内存会超过其容量,从而导致栈溢出错误1. 因 此,如果您想要使用递归调用,请确保递归的终止条件正确,并且递归层数不要太深,以避免栈溢出 错误的发生。 -
了解内存对齐吗?一般在哪里应用?
内存对齐是指将数据存储在内存中时,按照一定的规则将数据的起始地址调整到某个整数倍的位置上。这样做的目的是为了提高内存读写的效率,避免出现不必要的内存访问错误。内存对齐通常在结构体、联合体、类等复合数据类型中应用1。
内存对齐的主要应用场景包括:
- 平台原因:不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
- 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。
- 编译器优化:编译器在进行优化时,会根据内存对齐的规则来调整数据的存储方式,以提高程序的执行效率2.
内存对齐的规则通常由编译器来实现,但是在某些情况下,我们也可以手动控制内存对齐的方式。例如,在C语言中,可以使用
#pragma pack
指令来控制内存对齐的方式1.希望这些解释能够帮助您更好地理解内存对齐的概念和应用场景。如果您还有其他问题,请随时问我!
-
了解内存碎片吗?C#语言中会不会产生内存碎片呢?
内存碎片是指内存中存在一些不连续的小块空闲内存,这些空闲内存虽然总和很大,但是由于它们不连续,因此无法满足大块内存的申请。C#语言中也会产生内存碎片,这是因为C#语言使用的是垃圾回收机制,当垃圾回收器回收一些内存时,可能会留下一些不连续的小块空闲内存,从而导致内存碎片的产生1。
为了避免内存碎片的产生,可以采取以下措施:
- 尽量减少内存的分配和释放次数,避免频繁地申请和释放内存。
- 使用内存池技术,将多个小块内存合并成一个大块内存,从而减少内存碎片的产生。
- 优化算法和数据结构,减少内存的使用量,从而减少内存碎片的产生。
-
语言内部是如何对浮点数进行比较的呢?
浮点数在计算机内部是以二进制形式存储的,而二进制无法精确表示所有的十进制小数,因此在计算机中,浮点数的存储和运算都会存在一定的误差123. 由于这个原因,浮点数不能直接用
==
号比较大小。不同的编程语言对于浮点数的比较方式可能有所不同,但通常都会采用一些技巧来避免精度误差的影响。例如,可以比较两个浮点数之间的差值是否小于某个阈值,或者使用一些第三方库来进行比较24.对于C++和Java等语言,浮点数的比较通常是基于IEEE 754标准进行的5 . 根据这个标准,浮点数的比较通常采用以下方式:
- 如果两个浮点数都是 NaN,则它们不相等。
- 如果两个浮点数都是正零或负零,则它们相等。
- 如果两个浮点数的符号位不同,则它们不相等。
- 如果两个浮点数的指数部分不同,则它们不相等。
- 如果两个浮点数的指数部分相同但尾数部分不同,则它们不相等。
- 如果两个浮点数的指数部分和尾数部分都相同,则它们相等。