此分配对速度有影响吗?
Does this allocation have any effects on speed?
此非成员函数drawPoly()
从顶点列表中绘制 3D 空间中的 n 边多边形。
此函数通常在正常执行期间被调用数千次,速度至关重要。
忽略drawPoly()
中调用的函数的影响,25 元素顶点数组的分配对速度有什么负面影响吗?
void drawPoly(const meshx::Face& face, gen::Vector position,
ALLEGRO_COLOR color, bool filled)
{
ALLEGRO_VERTEX vertList[25];
std::size_t k = 0;
// ...For every vertex in the polygon...
for(; k < face.getNumVerts(); ++k) {
vertList[k].x = position.x + face.alVerts[k].x;
vertList[k].y = position.y + face.alVerts[k].y;
vertList[k].z = position.z + face.alVerts[k].z;
vertList[k].u = 0;
vertList[k].v = 0;
vertList[k].color = color;
}
// Draw with ALLEGRO_VERTEXs and no textures.
if(filled) {
al_draw_prim(vertList, nullptr, nullptr,
0, k, ALLEGRO_PRIM_TRIANGLE_LIST);
} else {
al_draw_prim(vertList, nullptr, nullptr,
0, k, ALLEGRO_PRIM_LINE_LOOP);
}
}
确定它的唯一方法是测量。但是你还能用什么来比较呢?在堆上分配显然会更慢。使用全局变量来保存顶点可能是一种选择 - 仅用于性能基准测试。
鉴于可构造对象的堆栈分配通常转换为堆栈指针的简单更改,分配本身可能没什么大不了的。可能产生可观察效果的是接触额外的缓存行。从性能角度来看,代码写入的缓存行越少越好。因此,您可以尝试将vertList[25]
拆分为缓存行大小的数组,并多次调用al_draw_prim
。基准测试将显示是否存在差异。
相关文章:
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 是否有任何区域设置会影响宽字符编码?
- 使用"静态"如何影响我的代码速度?
- OpenGL 更新缓冲区如何影响速度
- 此分配对速度有影响吗?
- "virtual"对C++析构函数有何影响?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 当在循环中使用时,std::shared_ptr 对该循环的矢量化有任何影响吗?
- 循环速度更快,有固定限制
- 明确定义'static const variable in a struct'对C++ 11 及以上有什么影响吗?
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- 每个帧的参考中都有多少性能影响
- 等号在大括号初始化中是否有影响?例如。 'T a = {}'与'T a{}'
- 完成的线程是否对 winapi 中的主程序有影响
- 在 c++ 中使用 "this" 关键字对性能有影响吗?
- 额外的继承对对象结构或实例化有影响吗?
- 当do额外的括号有影响时,除了运算符优先级
- "std::map with mutexes"与并行插入、查找、擦除之间是否有任何速度测试"libcds maps (Michael Hashmap and Split Order List)"?
- Array2的变化对Array(表)有影响
- try-catch对char**返回值有影响