我在Firefox(13.0.1)中遇到了一个奇怪的javascript行为,遇到了性能问题.最新的Chrome显示相同的行为.
当我执行看起来像下面的代码片段的javascript代码时,结果非常慢.但是,如果我只是简单地将外部循环的内容放在'j'上,我的速度大约是10倍.对于我的示例应用程序,这意味着我只是分别为'j = 0'和'j = 1'的固定值写了两次,因为'm'等于2.当然,我不想要'm '要硬编码,所以我问自己在使用真正的循环时究竟是什么导致了这种减速?
有人有想法吗?
我在web worker中运行代码.奇怪的是,如果我在主javascript上下文中执行相同而不是worker的上下文,则不会发生内联的积极效果.然而,仅为一个'j'值执行循环内容会带来巨大的加速,这在所有情况下都有帮助.这可能与内存管理有关吗?
非常感谢提前!
//m: very small, 1-2
for (j = 0; j < m; ++j) {
var attrib = attributes[j];
//n: very large, ~3*10^6 elements
for (i = 0; i < n; ++i) {
var data = largeBuffer[i];
//nc: very small, 2-3
for (c = 0; c < nc; ++c) {
var component;
//compute 'component
//..
attrib.typedArray[baseIdx + c] |= component;
}
baseIdx += nc;
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以通过 boost::program_options 多次使用零参数选项。
我有这样的想法:
mytool --load myfile --print_status --do-something 23 --print_status
Run Code Online (Sandbox Code Playgroud)
使用一个“print_status”参数很容易实现这一点,但对我来说如何使用此选项两次并不明显(在我的情况下,如果多次指定零参数选项,boost 会引发异常) .
所以,问题是:
是否有任何(简单的)方法可以通过 program_options 的开箱即用功能来实现这一点?
现在,这似乎是当前 program_options 实现的一个缺点。
PS:
之前已经有过类似的问题(都是四年多),没有找到解决办法:
http://lists.boost.org/boost-users/2006/08/21631.php
http://benjaminwolsey.de/de/node/103
该线程包含一个解决方案,但它是否是一个有效的解决方案并不明显,而且对于这样一个简单的功能来说似乎相当复杂:
我想知道使用原始标量类型(例如或)时,emplace_back和push_back的std::vector行为是否有所不同。凭直觉,我猜想在编译之后,这两个变体在这里都将导致相同的字节码:std::uint32_tstd::uint8_t
void copyListContent(std::uint8_t * list, std::size_t nElems,
std::vector<std::uint8_t> & vec)
{
vec.clear();
vec.reserve(nElems);
for (std::size_t i = 0; i < nElems; ++i)
{
//variant 1:
vec.push_back(list[i]);
//variant 2:
vec.emplace_back(list[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
如果那应该已经不对了,请纠正我。
现在,我开始挣扎的是当我问自己“列表”和向量的类型不匹配时会发生什么:
void copyListContent(std::uint8_t * list, std::size_t nElems,
std::vector<std::uint32_t> & vec)
{
//... same code as above
}
Run Code Online (Sandbox Code Playgroud)
将std::uint8_t元素std::uint32_t放入向量中时(使用emplace_back或push_back),这些元素将转换为,因此我想知道是否会触发某些“构造函数”的调用?在那种情况下,会emplace_back更有效,因为它将避免构造将要复制的临时对象?还是这些隐式转换没有任何作用,emplace_back并且push_back将表现相同?
于是,我问自己,你:
对于基本类型,如这些,都emplace_back和push_back总行为类似?
一个模糊的猜测是,我会说“大概是”,但是我对C ++内部的了解不足,无法可靠地自己回答这个问题。在这种情况下,我很乐意了解事情的工作原理-非常感谢!