c speed comparison - Serbipunk/notes GitHub Wiki

set memory

result vector.assign == memset > cv::Mat.setTo > std::fill

    {  // memset() Average: 0.21363 [ms] Std: 0.0478739 [ms]
        SCOPE_TIMER
        m_mouth.Mask.resize(4 * nSize);
        m_mouth.MaskCh0.resize(nSize);
        m_mouth.MaskCh1.resize(nSize);
        std::memset(m_mouth.Mask.data(), 0, 4 * nSize);
        std::memset(m_mouth.MaskCh0.data(), 0, nSize);
        std::memset(m_mouth.Mask.data(), 0, nSize);
    }

    {  // assign() Average: 0.209134 [ms] Std: 0.0441519 [ms]
        SCOPE_TIMER
        m_mouth.Mask.assign(4 * nSize, u8zero);
        m_mouth.MaskCh0.assign(nSize, u8zero);
        m_mouth.MaskCh1.assign(nSize, u8zero);
    }

    {  // opencv setTo() Average: 0.490142 [ms] Std: 0.0838222 [ms]
        SCOPE_TIMER
        m_mouth.Mask.resize(4 * nSize);
        m_mouth.MaskCh0.resize(nSize);
        m_mouth.MaskCh1.resize(nSize);
        cv::Mat mask = cv::Mat(m_mouth.m_nMaskHeight, m_mouth.m_nMaskWidth, CV_8UC4, m_mouth.Mask.data());
        mask.setTo(0);
        cv::Mat maskCh0 = cv::Mat(m_mouth.m_nMaskHeight, m_mouth.m_nMaskWidth, CV_8UC1, m_mouth.MaskCh0.data());
        maskCh0.setTo(0);
        cv::Mat maskCh1 = cv::Mat(m_mouth.m_nMaskHeight, m_mouth.m_nMaskWidth, CV_8UC1, m_mouth.MaskCh1.data());
        maskCh1.setTo(0);
    }

    {  // Average: 1.15699 [ms] Std: 0.0209771 [ms]
        SCOPE_TIMER
        m_mouth.Mask.resize(4 * nSize);
        m_mouth.MaskCh0.resize(nSize);
        m_mouth.MaskCh1.resize(nSize);
        std::fill(m_mouth.Mask.begin(), m_mouth.Mask.end(), u8zero);
        std::fill(m_mouth.MaskCh0.begin(), m_mouth.MaskCh0.end(), u8zero);
        std::fill(m_mouth.MaskCh1.begin(), m_mouth.MaskCh1.end(), u8zero);
    }