function本地对象会影响我的performance吗?

这是一个非常简单的问题。

假设我的渲染循环运行在60Hz,每次调用render()时,我绘制了所有游戏的建筑物,角色和风景,以使当前帧准备就绪。 每个实体都使用自己的RectangleShape实例进行绘制,RectangleShape是一个能够将纹理渲染到屏幕的类。 (我正在使用OpenGL,但它不应该是相关的)

RectangleShape是一个曾经分配过的类,为要绘制的“sprite”生成几何,有一些属性可以configuration,然后使用OpenGL渲染自己。

问题是,对于每个实体,我都分配了RectangleShape对象,在render()中进行configuration和渲染。 所以,在实践中,在render()里面有几十个如果不是这样的块:

// pseudocode RectangleShape entitySprite; entitySprite.setSize(); entitySprite.setTexture(); entitySprite.render(); 

我知道我没有使用预先分配的RectangleShape,已经configuration,我只调用render()的性能下降。 我知道这是最佳path,但我的问题是:

RectangleShape(数百次,每秒60次)的分配/释放是否会随着时间的推移而碎片化,从而降低整个程序的性能? 还是我可以安然无恙,尽管按需分配的性能是不变的,随着时间的推移不会退化?

我没有使用任何types的自定义分配器。 此外,请记住,RectangleShape构造函数在内部调整一个std :: vector,我认为这意味着一个堆分配。

谢谢

假设你使用的是C ++(这就是你的代码的样子),在函数内部创建RectangleShape本地实例不会导致内存碎片。 这些variables是在堆栈上创建的,所以当函数返回时清除堆栈帧时,内存将干净地消失。

但是请注意,如果RectangleShape本身使用newmalloc() (或者某些其他类似malloc()的调用)在堆上分配内存,那么这些分配可能会导致内存碎片化,具体取决于其他堆分配发生和其他分配可能会持续多久。