为什么内存管理很重要

Why is memory management important?

本文关键字:管理 内存 为什么      更新时间:2023-10-16

我知道这是一个非常愚蠢的问题,但我觉得我一直在错误地学习C++,太忽略内存了。我经常听说C++和C语言中的内存管理,但它对电子游戏或办公程序的重要性是什么?

C和C++是大多数人认为是低级别(或具有低级别部分)的语言,这允许您编写特定于硬件的代码。由于硬件的输入通常有很多先决条件,因此您必须手动管理内存,包括内存布局、分配和填充。

这是在与硬件交互时预期的,并且实际上是处理硬件所必需的。然而,当实现非硬件特定的代码时,同样的实用程序和语言功能仍然适用。也就是说,如果你想要一块动态内存,你必须明确地请求它,并明确地释放它(困难的部分)。在C++中,解决这一问题的方法是使用类,它可以帮助您处理内存管理,方法是将内存管理抽象在一起,或者提供垃圾收集(通常通过引用计数)。

不清理垃圾的后果,即将资源返回系统,也称为泄漏,是系统甚至会耗尽资源(因为资源通常是有限的,尽管有时是巨大的)。如果你的程序很小,执行时间有限,这可能不是问题,但你应该处理你的资源,因为对你来说,在程序终止后,托管环境实际上不需要这样做(尽管大多数系统至少在内存方面会这样做)。

另外请注意,您应该专注于管理资源。而不仅仅是记忆。有很多资源,这些资源都是有限的,因此都需要管理。其他资源可以是;文件、IP套接字、句柄、硬件设备。。。

对于特定的游戏,你必须期望在内存和文件访问方面有很高的资源使用率,而且你的游戏可能会运行很长一段时间(假设它很好),因此处理资源管理变得至关重要!

如果我的建议是远离原始指针和手动内存管理(新的/免费的),而是使用标准容器(std::vector等)、值语义(即按值而不是按指针传递参数)、引用语义,如果你真的必须使用指针,请使用std::unique_ptr和std::shared_ptr。(这是假设你正在编写非硬件代码,比如游戏或文本处理器)。

肖恩·保罗在2013年的本土会议上做了一个关于避免指针的演讲,这真的很值得一看。我记不起演讲的名字了,但它在channel9的网页上免费直播。来自母语的其他演讲也值得推荐!

您可能已经知道答案,但考虑到您的计算机只有有限的内存,应用程序必须以保守的方式管理这些内存是很自然的。例如,如果一款游戏内存管理不善,占用了你安装的8 GB内存中的很大一部分,那么其他需要少量内存的应用程序基本上会开始争夺内存。这通常会导致你的操作系统开始与其他存储介质交换内存,并最终降低你的计算机性能,直到有更多内存可用。