使用 GLM 时内存泄漏

Memory leak, when using GLM

我在我的 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,它会不会泄漏内存?

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

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

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

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