【发布时间】:2015-01-08 13:45:15
【问题描述】:
在堆栈上的内存分配量中是否存在性能显着下降的点?我知道如果它在堆上,当你的内存从 L1 移动到 L2 再到主内存时,缓存未命中的数量会急剧增加,但是堆栈呢?
在注释掉所有其他函数之后,在我个人的示例中,(游戏引擎)并专注于在每个对象的每一帧上调用这行代码:
image.getTrans().x += velocity[VELOCITY_X];
image.getTrans().y += velocity[VELOCITY_Y];
在从 0 个对象到 1500 个对象(我发现它本身对于很少的东西来说很大)之后,fps 从大约 2000 fps 到 200 fps 以恒定的速率下降,但是在添加大约 50 或 100 个对象之后对象越多,fps 会下降到 60 fps 或 50 fps,而不是下降到 2 fps 和 1 fps,添加更多后会更糟。
这里所做的只是将velocity[type](在堆栈上)添加到图像的transformation.type(也在堆栈上)。
由于现代计算机每秒可以运行如此荒谬的计算量(我相信大约 360 亿次),我在这里能想出的唯一解决方案是,大部分时间,程序都在等待内存,我无法理解,因为这些都在堆栈上。
抱歉,这里有任何遗漏的术语或遗漏的解释,我对很多与记忆有关的想法都比较陌生
【问题讨论】:
-
范围太广,无法诊断出实际的问题。个人资料。
-
堆栈也驻留在 RAM 中。
-
您的假设不正确。堆栈/堆与 L1/L2 缓存几乎没有关系——局部性和预取是的,堆栈/堆没有。鉴于这种程度的误解,您对自己代码的分析几乎没有可靠性。抱歉,当我只能看到雾时,我很难提供帮助。
-
算一下。在要处理的零对象时,您有 2000 fps。在 1500 个对象时,您的速率会降低到 200fps。这可能是因为您需要处理更多数据吗?
标签: c++ performance memory stack