相关疑难解决方法(0)

C++性能挑战:整数到std :: string的转换

任何人都可以击败我的整数到std :: string代码的性能,链接如下?

已经有几个问题可以解释如何将整数转换为std::stringC++中的整数,例如这个,但是所提供的解决方案都没有效率.

以下是一些可用于竞争的常用方法的编译就绪代码:

流行的看法相反,boost::lexical_cast有自己的实现(白皮书)并且不使用stringstream和数字插入运算符.我真的希望看到它的性能比较,因为另一个问题表明它很悲惨.

我自己的贡献,在桌面计算机上具有竞争力,并演示了一种在嵌入式系统上全速运行的方法,与依赖整数模数的算法不同:

如果您想使用该代码,我将根据简化的BSD许可证提供(允许商业使用,需要归属).请问.

最后,该功能ltoa是非标准的,但可广泛使用.

  • ltoa版本,适用于拥有提供它的编译器的任何人(ideone没有):http://ideone.com/T5Wim

我很快就会发布我的性能测量结果.

算法规则

  • 提供将至少32位有符号和无符号整数转换为十进制的代码.
  • 产生输出作为std::string.
  • 没有与线程和信号不兼容的技巧(例如,静态缓冲区).
  • 您可以假设ASCII字符集.
  • 确保INT_MIN在绝对值无法表示的二进制补码机上测试代码.
  • 理想情况下,输出应为字符的字符与规范的C++版本使用相同的stringstream,http://ideone.com/jh3Sa,但任何事情,这显然是理解的,因为正确的号码也是OK.
  • :虽然你可以使用你想要进行比较的任何编译器和优化器选项(除了完全禁用),但代码还需要编译并在至少VC++ 2010和g ++下给出正确的结果.

希望讨论

除了更好的算法,我还想在几个不同的平台和编译器上获得一些基准测试(让我们使用MB/s吞吐量作为我们的标准测量单位).我相信我的算法代码(我知道sprintf基准测试需要一些快捷方式 - 现在已经修复)是标准的明确定义的行为,至少在ASCII假设下,但是如果你看到任何未定义的行为或输出的输出无效,请指出.

结论:

不同的算法对g ++和VC2010执行,可能是由于std::string每个算法的实现不同.VC2010显然在NRVO方面做得更好,摆脱了价值回报只对gcc有帮助.

发现代码的性能优于sprintf一个数量级. ostringstream落后50倍甚至更多.

挑战的胜利者是user434507,他在gcc上生成的代码运行速度是我自己的350%.由于SO社区的突发奇想,其他条目将被关闭.

目前(最终?)速度冠军是:

  • 对于gcc:user434507,速度比sprintf …

c++ string performance integer

118
推荐指数
6
解决办法
4万
查看次数

openCV:如何将视频分割成图像序列?

使用opencv,如何将视频分割成图像序列?
我如何拆分它以使输出成为一系列图像?

c c++ video opencv video-capture

9
推荐指数
2
解决办法
2万
查看次数

如何使用C中的Pebble SDK将int转换为字符串

刚拿到我的Pebble,我正在玩SDK.我是C的新手,但我知道Objective-C.那么有没有办法创建这样的格式化字符串?

int i = 1;
NSString *string = [NSString stringWithFormat:@"%i", i];
Run Code Online (Sandbox Code Playgroud)

我不能用sprintf,因为没有malloc.

我基本上要显示inttext_layer_set_text(&countLayer, i);

c string int pebble-watch pebble-sdk

8
推荐指数
1
解决办法
4028
查看次数

想要在没有itoa功能的情况下将整数转换为字符串

我想int to char在不使用itoa()函数的情况下在C中转换*.

因为在我的Linux系统上我的itoa功能不存在.我正在使用此处找到的代码

我想在使用Linux的嵌入式设备上运行此功能.

所以我正在寻找不使用itoa.

sprintf也想使用它,因为它只用于打印.

所以任何身体请帮我弄清楚这个问题.

谢谢

c linux embedded

0
推荐指数
2
解决办法
2万
查看次数