如何优化此线条绘制程序? memcpy会更快地工作吗?

void ScreenDriver::HorizontalLine(int wXStart, int wXEnd, int wYPos,
    COLORVAL Color, int wWidth)
{
    int iLen = wXEnd - wXStart + 1;

    if (iLen <= 0)
    {
        return;
    }
    while(wWidth-- > 0)
    {
        COLORVAL *Put = mpScanPointers[wYPos] + wXStart;
        int iLen1 = iLen;

        while(iLen1--)
        {
            *Put++ = Color;
        }
        wYPos++;
    }
}

最佳答案

我认为您的意思是说“memset”而不是“memcpy”。替换这段代码:

while (iLen--)
{
    *Put++ = Color;
}


memset(Put, Color, iLen);

可能更快,但很大程度上取决于您的 objective-c PU,内存架构和遇到的iLen典型值。这不可能是一个大的胜利,但是如果您有时间,我鼓励您衡量替代方案,因为这种练习是真正理解优化的唯一方法。

当然,此memset()使用仅在COLORVAL具有字符大小的情况下才有效。

关于c++ - 画线例程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1154618/

10-09 08:11