为什么内存管理很重要
Why is memory management important?
我知道这是一个非常愚蠢的问题,但我觉得我一直在错误地学习C++,太忽略内存了。我经常听说C++和C语言中的内存管理,但它对电子游戏或办公程序的重要性是什么?
C和C++是大多数人认为是低级别(或具有低级别部分)的语言,这允许您编写特定于硬件的代码。由于硬件的输入通常有很多先决条件,因此您必须手动管理内存,包括内存布局、分配和填充。
这是在与硬件交互时预期的,并且实际上是处理硬件所必需的。然而,当实现非硬件特定的代码时,同样的实用程序和语言功能仍然适用。也就是说,如果你想要一块动态内存,你必须明确地请求它,并明确地释放它(困难的部分)。在C++中,解决这一问题的方法是使用类,它可以帮助您处理内存管理,方法是将内存管理抽象在一起,或者提供垃圾收集(通常通过引用计数)。
不清理垃圾的后果,即将资源返回系统,也称为泄漏,是系统甚至会耗尽资源(因为资源通常是有限的,尽管有时是巨大的)。如果你的程序很小,执行时间有限,这可能不是问题,但你应该处理你的资源,因为对你来说,在程序终止后,托管环境实际上不需要这样做(尽管大多数系统至少在内存方面会这样做)。
另外请注意,您应该专注于管理资源。而不仅仅是记忆。有很多资源,这些资源都是有限的,因此都需要管理。其他资源可以是;文件、IP套接字、句柄、硬件设备。。。
对于特定的游戏,你必须期望在内存和文件访问方面有很高的资源使用率,而且你的游戏可能会运行很长一段时间(假设它很好),因此处理资源管理变得至关重要!
如果我的建议是远离原始指针和手动内存管理(新的/免费的),而是使用标准容器(std::vector等)、值语义(即按值而不是按指针传递参数)、引用语义,如果你真的必须使用指针,请使用std::unique_ptr和std::shared_ptr。(这是假设你正在编写非硬件代码,比如游戏或文本处理器)。
肖恩·保罗在2013年的本土会议上做了一个关于避免指针的演讲,这真的很值得一看。我记不起演讲的名字了,但它在channel9的网页上免费直播。来自母语的其他演讲也值得推荐!
您可能已经知道答案,但考虑到您的计算机只有有限的内存,应用程序必须以保守的方式管理这些内存是很自然的。例如,如果一款游戏内存管理不善,占用了你安装的8 GB内存中的很大一部分,那么其他需要少量内存的应用程序基本上会开始争夺内存。这通常会导致你的操作系统开始与其他存储介质交换内存,并最终降低你的计算机性能,直到有更多内存可用。
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存