小编Nat*_*mal的帖子

如何检测错误共享会降低性能?

我正在调整一个高性能的多线程应用程序,我怀疑虚假共享可能是导致性能不佳的原因.我如何验证是否是这种情况?

我正在使用gcc 4.82在Ubuntu 12.04上运行C++.

c++ concurrency performance multithreading

5
推荐指数
2
解决办法
913
查看次数

为什么boost :: function慢?

我正在做一些计时测试,我的一个测试是比较调用函数的不同方法.我用各种方法调用了N个函数.我尝试了常规函数调用,虚函数调用,函数指针和boost :: function.

我在Linux中使用gcc和-O3优化做到了这一点.

正如预期的那样,虚拟调用比常规函数调用慢.然而令人惊讶的是,boost :: function的速度比虚拟调用慢33%.

有没有其他人注意到这一点?任何线索,为什么这是?

c++ performance boost

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

如何将参数完美地转发给STL集合?

如何将对象创建的参数完美地转发到STL集合?

我想避免不必要的副本.虽然我可以通过存储指针来避免这种情况,但我不想使用动态内存.

struct MyFatClass
{
    explicit MyFatClass(int a) {...}
    ...
}; 

std::vector<MyFatClass> records;
records.emplace_back(MyFatClass(1000)); // How can I avoid this temporary object? 
Run Code Online (Sandbox Code Playgroud)

c++ performance stl

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

MOESI缓存一致性协议相对于MESI有什么好处?

我想知道MOESI相对于MESI缓存一致性协议有什么好处,以及哪种协议目前最受现代体系结构的青睐。如果成本不允许,收益通常不会转化为实施。MOESI在MESI上的定量性能结果也很高兴看到。

memory multithreading caching memory-management cpu-architecture

4
推荐指数
2
解决办法
1425
查看次数

为什么按照C ++ 17标准,反向迭代器不是正式的迭代器类别?

反向迭代器不在迭代器类别标签列表中,因此假定它不是类别。那到底是什么呢?

c++ stl c++17

4
推荐指数
2
解决办法
251
查看次数

需要多少个时钟周期来修改 C++11 原子 bool?

我想知道假设它使用最严格的内存模型设置,修改 std::atomic (或atomic_flag)应该需要多少个时钟周期?

c++ concurrency performance atomic c++11

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

为什么使用带有lambda的std :: bind时产生的对象如此之大?

与lambda相比,绑定创建的对象的大小非常大.这让我质疑它的效率.有没有人有任何意见?

我在gcc 4.8.2上使用Linux

    auto f1 = [](int item, int N) { return item < N; };
    auto f2 = bind(f1, _1, 15);

    cout << "\nSize of lambda and bound lambda? "
         << sizeof(f1) << " " << sizeof(f2) << endl; 
Run Code Online (Sandbox Code Playgroud)

这输出:

Size of lambda and bound lambda? 1 8
Run Code Online (Sandbox Code Playgroud)

c++ performance lambda c++11

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

何时使用标准<在地图/排序中比较双打是否安全?

可能重复:
std:map中的浮点键

我知道有些情况下你想提供一个特殊的功能来进行双打比较.这种情况可能包括您进行算术运算的次数,因为您在浮点运算中得到了舍入.

但有时使用<或>来比较双打是否安全?

假设我有一次计算的双精度列表,我需要将其排序或用作地图中的一个键(即.std :: map),并保证之后没有任何额外的算术运算.

如果我使用迭代器遍历集合,我可以保证我的排序顺序是否正确?

我想我可以通过这种方式获得更多性能.

c++ floating-point

2
推荐指数
1
解决办法
374
查看次数

如何从参数包构造引用的std :: tuple?

我有一个构建器类,我想将参数存储为引用,以便在后续构建中使用。

我想将可变数量的参数传递给我的类,使用类模板参数推导来推断模板参数,并将这些传递的参数作为引用存储在std :: tuple中。

从参数包转换为引用的std :: tuple的最简单方法是什么?

我发现std :: forward_as_tuple的功能与我想要的类似,但是我不想要转发引用,而且它在成员元组的初始化期间提供了语法错误。

template <typename... Ts>
struct Builder
{
using ArgsT = decltype(std::forward_as_tuple(Ts{}...));

ArgsT args_;

Builder(Ts&... ts) : args_(ts...) {}
};

int main()
{
    struct Foo
    {
        int a;
        double b;
    };

    Foo foo{};
    Builder fooBuilder{foo.a, foo.b};
}
Run Code Online (Sandbox Code Playgroud)

语法错误是:

错误:没有匹配的调用函数 std::tuple<int&&, double&&>::tuple(int&, double&)

c++ variadic-templates stdtuple c++17

0
推荐指数
1
解决办法
85
查看次数