Questions tagged «memory»

4
C ++游戏如何处理内存分配失败?
我知道有几种用C ++编写的游戏,但是没有使用异常。由于C ++中的内存分配失败处理通常围绕std::bad_alloc异常进行,因此这些游戏如何处理此类失败? 它们只是崩溃了,还是有另一种方法来处理内存不足的错误并从中恢复?

2
GPU如何处理纹理和VRAM?
实际上,这是一系列相互关联的问题: 经过渲染管道时,压缩纹理(dxt5 / dxt1等)是否已完全解压缩? 如果第一个问题的答案是正确的,那么如何管理几个未压缩的大型纹理? 帧缓冲与现代GPU中的VRAM有什么不同吗?
18 textures  gpu  memory 

2
启动时分配和释放大量内存是否“清理内存”?
《游戏编码完成》第四版,第5章(游戏初始化和关闭),“ 检查内存”部分包含以下有趣的代码示例: bool CheckMemory(const DWORDLONG physicalRAMNeeded, const DWORDLONG virtualRAMNeeded) { MEMORYSTATUSEX status; GlobalMemoryStatusEx(&status); if (status.ullTotalPhys < physicalRAMNeeded) { // you don’t have enough physical memory. Tell the player to go get a // real computer and give this one to his mother. GCC_ERROR("CheckMemory Failure: Not enough physical memory."); return false; …
18 c++  memory 

3
您如何为内存不足情况做准备?
对于范围界定明确的游戏而言,这可能很容易,但是问题是关于沙盒游戏,允许玩家创建和构建任何东西。 可能的技术: 使用上限的内存池。 删除不再需要的对象。 在开始时分配额外的内存,以便以后可以将其作为恢复机制释放。我会说大约2-4 MB。 这在移动/控制台平台上更可能发生,在该平台上,内存通常受到限制,与您的16 GB PC不同。我假设您完全控制了内存分配/释放,并且不涉及垃圾回收。这就是为什么要将其标记为C ++。 请注意,我并不是在谈论有效的C ++项目7“为内存不足的情况做准备”,尽管这很相关,但我希望看到一个与游戏开发更相关的答案,您通常会对游戏开发有更多的控制权发生。 总而言之,当您针对内存控制台/移动设备有限的平台时,如何为沙盒游戏的内存不足情况做准备?

3
CPU-GPU内存数据流
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是一名新手图形程序员,最近我一直在想-模型数据(网格和材质)如何从应用程序(CPU内存)流到图形卡(GPU内存?)?假设我有一个静态模型(例如建筑物),该模型一次加载和设置一次,并且在整个应用程序生命周期中都没有改变。 它的数据是否仅发送到GPU内存一次并永久存在? 当实际渲染模型的每个帧时,GPU处理器是否每次都必须从GPU内存中获取其数据?我的意思是-如果我有2个模型分别渲染多次,那么,如果我先多次渲染第一个模型,然后又多次渲染第二个模型,或者如果我仅一次渲染第一个模型,第二个就渲染一次,那将很重要一直像那样交织在一起?从这个意义上讲,我可以将此问题称为“内部GPU数据流”。 显然显卡的内存有限-当无法容纳渲染1帧所需的所有模型数据时,我猜想它一直在每帧从CPU RAM提取(部分)数据,对吗? 我知道互联网上有很多关于这方面的书籍和内容,但是也许您有一些关于如何管理此数据流的快速通用指南(何时发送什么和多少,何时以及如何呈现)? 编辑: 我忘了一个区别:将数据发送到GPU,并且将缓冲区设置/绑定为当前。后者会导致任何数据流吗? Edit2: 阅读Raxvan的文章后,我想提出一些动作: 通过初始化创建缓冲区(正如他所说,我可以将数据存储在CPU ram或GPU之一中) 缓冲数据更新(当数据保存在CPU内存中时,我认为这很简单;当数据保存在GPU内存中时,需要从GPU提取到CPU内存(然后取回)) 将缓冲区绑定为活动状态(这是一种告诉API我希望此缓冲区在下一次绘制调用中呈现的方式,并且它本身不会执行任何操作吗?) API绘图调用(在这里我想听听您在那里实际发生的事情)

5
为什么块大小通常是2的幂?
我的世界有很多Minecraft克隆版本,我正在着手自己的实现。地形渲染的原理是将整个世界分成固定大小的块,以减少局部更改的工作量。 到目前为止,在Minecraft中,块大小为16 x 16 x 256。在克隆中,我也总是看到块大小为2的幂。 是否有任何原因,可能与性能或内存有关?我知道2的幂在二进制计算机中起特殊作用,但与块大小有什么关系?

1
我如何知道内存处理不正确?
每当我加载纹理时,我的(2D)游戏的内存占用似乎都在增加,例如,当我启动游戏时,在穿越〜367mb的背景文件后,它使用30 mb的专用RAM,因此有时它全部在RAM中,它会增加到54 mb专用RAM。 在经过相同的距离但在两个点之间反复来回之后,会发生相同的事情。 但是,我的读数显示,纹理退出屏幕后大约一秒钟,该程序正确地调用了glDeleteTextures。valgrind没有发现任何泄漏。 我怎么知道我是否应该为此担心,或者这仅仅是操作系统页面存储方式的怪癖?
12 opengl  memory 

3
为什么资产需要自定义内存管理?
几乎所有与游戏编程有关的资源,尤其是3D开放世界游戏,都在谈论您如何不断地在磁盘,系统内存和视频内存之间进行资产的卸载和重新加载。我可以在控制台上理解这一点,因为它们具有非常简单的内存管理方案,无法处理任何潜在的溢出。 但是,在PC上,情况就大不相同了。操作系统提供了用于系统内存的虚拟内存,图形驱动程序负责从CPU到GPU的来回交换。那么,为什么一次加载所有内容并仅处理预取并仅确保在交换所需资产时没有阻塞是为什么呢? 这并不是说所有的事情都是像那样天真地分配的malloc。一切都将保持连续并且与缓存保持一致。如果您不必担心手动分页和换页,那么提高内存访问的效率可以说很容易... 更新: 在对异步缓冲区传输进行了一些了解之后,我发现图形驱动程序可以自动分页内存的方式不是最理想的。CPU资源是否也是如此?即,是否最好始终手动管理何时在存在虚拟内存的情况下何时加载和卸载给定资源?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.