为什么内存管理很重要?

时间:2014-04-14 19:51:31

标签: c++ c memory-management

我知道这是一个非常愚蠢的问题,但我觉得我一直在学习C ++错误,忽略了太多的记忆。我总是听说C ++和C中的内存管理,但它对于像视频游戏或某些办公程序这样的重要性是什么?

2 个答案:

答案 0 :(得分:1)

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

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

不清理垃圾的后果,即。将资源返回到系统(也称为泄漏)是系统将永远耗尽资源(因为资源通常是有限的,尽管有时是巨大的)。如果您的程序很小,并且执行范围有限,这可能不是问题,但是您应该处理您的资源,因为托管环境实际上不需要这样做,在程序终止后(尽管大多数情况下)系统会这样做,至少在记忆方面)。

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

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

如果建议远离原始指针和手动内存管理(新/免费),而不是使用标准容器(std :: vector,相似),那么我最好的部分就是值语义(即通过值传递参数而不是通过指针。),引用语义,如果你真的必须使用指针,请使用std :: unique_ptr和std :: shared_ptr。 (这假设您编写非硬件代码,如游戏或文本处理器)。

Sean Paul在2013年的本土会议上做了一个关于避免指点的讨论,这真的值得一看。我无法记住谈话的名称,但它已经免费存在于channel9网页上。其他来自本土的谈话也值得推荐!

答案 1 :(得分:0)

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