【问题标题】:Memory leak, when using GLM内存泄漏,使用 GLM 时
【发布时间】:2015-11-23 22:20:13
【问题描述】:

我在我的 SDL+OpenGL 项目中使用 glm (Opengl Math)。但我注意到,代码可能会泄漏内存。这是一个例子:

#include <glm/glm.hpp>

int foo()
{
        glm::vec4 Position = glm::vec4(glm::vec3(0.0), 1.0);
        glm::mat4 Model = glm::mat4(1.0);
        Model[4] = glm::vec4(1.0, 1.0, 0.0, 1.0);
        glm::vec4 Transformed = Model * Position;
        return 0;
}

在第一行中,我们创建了一个新的glm::vec3 实例,但在函数结束时,我们并没有释放分配的内存。如果我在循环中调用函数foo,那么它会泄漏内存吗?

【问题讨论】:

  • 堆栈分配总是在超出范围时被释放。只有堆分配必须被释放(这里不是这种情况)。
  • 您不会泄漏内存,但除非glm 使用基于1 的索引,否则访问Model[4] 是未定义的行为。

标签: c++ memory-leaks glm-math


【解决方案1】:

由于实例不是使用new 创建的,它们将被放置在堆栈上,而不是堆上。因此,当foo使用的栈被清空时,这些实例的内存将被重新占用。

【讨论】:

    【解决方案2】:

    您正在创建的变量具有自动存储期限,这意味着它们会在超出范围时自动清理。

    对于临时的glm::vec3,它在语句的末尾。所以,这里没有内存泄漏。

    只有在使用动态存储持续时间时才会发生内存泄漏,即使用newmalloc 分配的变量。

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2015-09-14
      相关资源
      最近更新 更多