【发布时间】:2013-04-08 09:45:12
【问题描述】:
根据Mark Ransoms answer 使用memset,我在vector<int> 上使用memset 为所有元素分配值。
memset(&match_begin[0], 0xff , sizeof(match_begin[0]) * match_begin.size());
与std::fill 相比,它确实有显着的性能改进,并且运行良好(g++ 4.3.2,64bit linux)。这段代码是否安全,例如,std::vector 实现是否总是保证数据的内存分配是连续的?是否有可能在 stl 库的未来(或不同的)实现中,这可能会在以后更改并破坏我的代码?
【问题讨论】:
-
std::fill显然更干净,考虑memset的唯一原因是性能。你是如何衡量性能差异的? gcc 有一个优化,可以识别类似 memset 的循环并用对 memset 的调用替换它们。 -
@Marc,在我的函数中,我不小心同时放入了 memset 和 fill。实际上在性能上没有任何可见的差异。我的代码读取 tcp 流中的每个数据包。通过发送一个大文件并测量时间,我对性能有了一个基本的了解。