小编vol*_*tan的帖子

javascript:通过循环内联10倍加速?

我在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)

javascript memory performance

21
推荐指数
1
解决办法
794
查看次数

boost program_options:多次使用零参数选项?

我想知道是否可以通过 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

该线程包含一个解决方案,但它是否是一个有效的解决方案并不明显,而且对于这样一个简单的功能来说似乎相当复杂:

使用 Boost program_options 指定级别(例如 --verbose)

c++ boost

4
推荐指数
1
解决办法
631
查看次数

emplace_back与push_back的原始类型

我想知道使用原始标量类型(例如或)时,emplace_backpush_backstd::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_backpush_back),这些元素将转换为,因此我想知道是否会触发某些“构造函数”的调用?在那种情况下,会emplace_back更有效,因为它将避免构造将要复制的临时对象?还是这些隐式转换没有任何作用,emplace_back并且push_back将表现相同?

于是,我问自己,你: 对于基本类型,如这些,都emplace_backpush_back总行为类似?

一个模糊的猜测是,我会说“大概是”,但是我对C ++内部的了解不足,无法可靠地自己回答这个问题。在这种情况下,我很乐意了解事情的工作原理-非常感谢!

c++ vector c++11

3
推荐指数
1
解决办法
680
查看次数

标签 统计

c++ ×2

boost ×1

c++11 ×1

javascript ×1

memory ×1

performance ×1

vector ×1