首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++字符串流构造函数有关键部分吗?

g++字符串流构造函数有关键部分吗?
EN

Stack Overflow用户
提问于 2015-05-28 08:38:10
回答 2查看 201关注 0票数 0

我查看了一些使用openmp并行化循环的源代码。在循环中构造了一个字符串流,并将几个字符写入其中,并在最后使用stringstream::str()检索字符。循环的并行化似乎对性能没有太大影响,直到字符串流构造函数从循环中移出并替换为对seem流的调用::clear()。

在字符串流构造函数中是否存在关键部分或其他阻塞机制?如果是的话,这是有记录的地方吗?代码是用g++ 4.9.2编译的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-28 08:42:10

销毁stringstream对象会破坏其内存缓冲区。您正在看到循环中堆分配的效果。

调用clear不会释放任何内存。它允许循环重用缓冲区。

票数 1
EN

Stack Overflow用户

发布于 2021-09-09 20:18:08

std::stringstream构造函数调用std::locale的默认构造函数。

这是因为它继承自std::ios_base,这些类型必须调用std::basic_ios::init() (如这里所描述的:base)。此调用符合以下条件:getloc()将返回默认构造的std::local对象的副本(如这里所述的ios/init),因此必须在std::stringstream的构造函数中调用std::locale()

std::local构造函数将导致与当前全局区域设置相关的方面上的引用计数增量。(见https://en.cppreference.com/w/cpp/locale/locale)。

区域设置引用计数和每个方面引用计数都以线程安全的方式更新,类似于std::shared_ptr。

增量必须是原子的,因为它正在修改共享状态。

根据您正在使用的标准库实现,这可以解释为什么您没有看到预期的性能提高。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30501327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档