根據使用memset的Mark Ransoms answer,我在vector<int>
上使用memset爲所有元素賦值。memset on vector <int>
memset(&match_begin[0], 0xff , sizeof(match_begin[0]) * match_begin.size());
它有超過std::fill
一個顯著的性能提升,它工作正常(G ++ 4.3.2,64位版)。這個代碼是否安全,就像std :: vector的實現一樣總能保證數據的內存分配是連續的?是否有可能在未來(或不同)的stl庫實現中,這可能會改變並在以後中斷我的代碼?
'std :: fill'明顯更乾淨,考慮memset的唯一原因就是性能。你如何衡量性能差異? gcc有一個優化,可以識別類似memset的循環,並用memset調用替換它們。 – 2013-04-08 11:52:46
@Marc,在我的功能,我不小心把memset和填充。其實在性能上沒有任何可見的差異。我的代碼通過tcp流讀取每個數據包。我通過發送大文件和測量時間來了解性能的基本概念。 – woodstok 2013-04-08 12:30:32