【问题标题】:Can I allocate more memory than I use我可以分配比我使用更多的内存吗
【发布时间】:2021-06-06 14:18:28
【问题描述】:

我是 C 编程的新手,一直在搞乱内存管理的东西。我有几个问题都与一个场景有关(我会用粗体表示问题)。如果我要分配 10 个字节(使用 malloc)的内存,但只使用它来存储一个 int(4 个字节)

,那么我正在做的一个简化版本是

这会导致内存方面的问题吗?

多余的内存会怎样?

必须手动释放还是有办法自动释放?

我是不是应该不费吹灰之力,提前确定合适的尺寸?

感谢您提供的任何帮助,非常感谢

【问题讨论】:

  • 1.不,如果你当然释放它。 2.什么都没有,它会保持未初始化状态(除非你使用calloc),如果/当你释放内存时,额外的内存也会消失。 3.手动使用free()。 4. 使用您需要的内存量。如果您认为以后需要更多,请分配更多。如果您没有足够但需要更多,请使用 realloc。

标签: c windows memory memory-management


【解决方案1】:

这会导致内存方面的问题吗?

什么的哪一边,哪一边是内存?

它可能会使用比需要更多的内存。

多余的内存会怎样?

它仍然未使用。

必须手动释放还是有办法自动释放?

在通用操作系统中,当您的进程终止时,系统将恢复内存。如果您希望在此之前分配的内存可供重用,则必须释放它。

我是不是应该不费吹灰之力,提前确定合适的尺寸?

适当的策略取决于具体情况。一些可能性是:

  • 您分配了大量内存,执行操作以将数据放入其中,然后在了解数据大小后,使用realloc 释放多余的内存。
  • 您对所需的内存量进行了公平的估计,确保达到或超过要求,而不是低于要求,分配该内存,并让多余的部分浪费掉。
  • 您分配了一些内存并开始操作以将数据放入其中。当您获取数据时,您会注意它是否填充了分配的数量。当需要更多时,您可以使用realloc 来获得更多。

【讨论】:

  • 这清除了很多东西谢谢:)
【解决方案2】:

出于您的目的,内存分配器并不知道,也不真正关心您在 malloc 的块中实际使用了多少内存。这里的关键是永远不要使用比 malloc 更多的内存。额外的内存就在那里,如果您需要,可以使用。

请注意,分配 10 字节与 4 字节不会对您产生太大影响,如果您没有执行此分配数千次的话。

我建议您永远不要跳过的唯一验证/大小计算是确保您永远不会为要放置在分配空间中的项目分配太少的内存。

从技术上讲,您不必释放内存(因为操作系统会在应用程序退出后清理您造成的混乱),但您绝对应该这样做。如果您在使用完内存后没有释放内存,这称为内存泄漏,这将导致您的应用程序使用更多的 RAM。此外,要非常小心,在释放内存后不要再使用它。这称为释放后使用,可能是一个危险的错误。

与其他一些语言相比,C 中的内存管理在很大程度上需要您手动完成。

【讨论】:

  • 这是有道理的。我知道内存管理很重要,但我很努力,但我仍然想找到一个可以向该语言新手清楚地解释它的来源
猜你喜欢
  • 2018-12-23
  • 2011-03-31
  • 2020-10-30
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2011-08-21
  • 2013-11-16
相关资源
最近更新 更多