根据使用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