使用 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
,它在语句的末尾。所以,这里没有内存泄漏。
内存泄漏只能在使用动态存储持续时间时发生,即使用new
或malloc
分配的变量。
我在我的 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
,它在语句的末尾。所以,这里没有内存泄漏。
内存泄漏只能在使用动态存储持续时间时发生,即使用new
或malloc
分配的变量。