以下函數針對T運行兩個值。一個是4個字節(與DWORD相同)。另一個是64字節。緩衝區旨在將對象存儲在其緩存中,並在稍後的日期檢索它們。C++ STD :: Vector使用模板化函數需要異常長時間運行
當使用64字節結構時,函數中的總時間會顯着跳躍。向量中的查找時間,memcpy甚至在函數的「SELF」部分中的時間都急劇增加。
存儲函數幾乎與下面的代碼相反,並且似乎沒有遭受相同的不對稱時間。
任何想法爲什麼?
template <class T>
void Buffer::retrieve (T& Value)
{
int nTypeSize = sizeof (T);
int nDWORDSize = sizeof (DWORD);
/*
* Number of DWORDs needed to store this value.
*/
int nDWORDCount = (nTypeSize + 3)/4;
if (m_nReadPosition + nDWORDCount >= m_nSize)
return;
memcpy (&Value, &m_Cache[m_nReadPosition], nTypeSize); //m_Cache is a DWORD vector.
m_nReadPosition += nDWORDCount;
}
首先,你使用的是什麼系統?第二,你的意思是什麼?我希望事情需要更長的時間,比64字節多4字節。第三,你是什麼意思「尋找向量中的時間」和「功能」的「自我」部分?第四,你如何確定時間? – 2009-07-02 15:54:27
除了一些進一步的e xplanations按其他人的要求,你應該注意到,發佈的解決方案是脆弱的,它不適用於依賴於用戶提供的拷貝構造函數的T類型(資源處理對象) – 2009-07-02 16:31:46
什麼,它是16倍慢?給我們一個號碼!我不會感到驚訝,如果它稍微超過這個數量,那麼當複製64字節時,可能不會執行memcpy()的一些編譯器優化。 – 2009-07-02 21:24:01