小编use*_*112的帖子

使用虚函数而不是IF语句更快?

我记得在某处在线阅读,在极端低延迟的情况下,最好使用虚函数代替IF语句.

这是真的?他们基本上说动态多态性对于速度情况更好吗?

是否有任何用户可以分享任何其他C++低延迟"怪癖"?

c++ visual-c++

7
推荐指数
1
解决办法
1572
查看次数

在UNIX上学习C++编程的好书(pref Linux)?

用户可以帮我找一些适合在Unix平台上编写C/C++代码的书吗?

我的重点是编写低延迟代码,用于电子交易平台.

(我意识到StackOverflow上有一些线程一般会询问有关语言的书籍,但我的Q专门针对Unix OS上的编码)

c c++ unix linux

7
推荐指数
1
解决办法
6641
查看次数

你在子类中调用super.finalize()吗?

我读(某处),finalize()当子类被垃圾收集时,不能保证调用父类,这是否意味着大多数开发人员finalize()在子类中重写并调用super.finalize()

java inheritance garbage-collection

7
推荐指数
1
解决办法
6111
查看次数

C++派生类是否必须在头文件中包含继承函数/成员的定义?

标题几乎说明了所有派生类必须重新包含从头文件中的父类继承的函数/数据成员的定义?

可以从继承语句隐含继承的函数/成员吗?它们是否应该为了可读性而明确重新声明,否则这可能会隐藏?

我不确定我应该在派生类的头文件中做什么.

c++ polymorphism inheritance header

7
推荐指数
2
解决办法
4954
查看次数

通过shared_ptr访问是否比原始指针更多地污染缓存行?

我理解一个好的编译器可以执行优化,以便访问,例如,int*通过std::shared_ptr使用相同的程序集完成,就像使用原始int*指针一样.

我的问题是:包含优化的智能指针的缓存行是否会被智能指针中的其他数据成员污染,如引用计数器?因此,虽然生成的程序集与实际指针相同,但缓存性能可能更差,因为没有那么多的缓存行被有效使用?

编辑:如果我们迭代像这样的结构std::vector<std::shared_ptr<int>>并使用整数,这种性能影响会更加明显.

c++ optimization performance shared-ptr

7
推荐指数
1
解决办法
664
查看次数

自动更新结构的两个成员的最佳方法?

我有一个包含两个数据成员的结构:

struct A{
    short b;
    short c;
};
Run Code Online (Sandbox Code Playgroud)

以及包含许多这些struct对象的向量:

std::vector<A> vec;
Run Code Online (Sandbox Code Playgroud)

在运行时,数据成员A.bA.cstruct对象设置为零/值x.然而,bc必须在相同的时间-一个不能在没有其他分别更新修改.我正计划使用原子compare_exchange_weak()来进行更新.

我不确定我是否应该将每个结构体表示为std::atomic<A>向量中,或者我是否应该在结构中放置一个联合,将两个短路组合成一个uint32_t然后修改它:

union A {
    struct {
         short b;
         short c;
    };

    uint32_t d;
};
Run Code Online (Sandbox Code Playgroud)

什么是最好的解决方案?我应该存储以下矢量:

std::vector<uint32_t>
Run Code Online (Sandbox Code Playgroud)

并且在访问每个元素时,reinterpret_cast到A,以获得d

我希望锁定尽可能地最少侵入.

不需要可移植性,这将在Linux,64位,x86,GCC 4.8+编译器上

c++ atomic c++11

7
推荐指数
1
解决办法
2282
查看次数

GDB 在查看地址时打印回溯而不是中断

在GDB我想watch写入一个内存地址。watch但是,是否可以在写入地址时设置so,而不是中断到命令行,而是打印回溯并继续执行?

c++ debugging gdb

7
推荐指数
1
解决办法
310
查看次数

缓存一致性协议如何实现原子性?

我理解通过依赖缓存一致性协议(MESI/MESIF)xsub(),可以在不使用LOCK前缀的操作上保证原子性.

1)缓存一致性协议如何做到这一点?

它让我想知道缓存一致性协议是否可以强制执行原子性,为什么我们需要特殊的原子类型/指令等?

2)如果MOSI跨多核系统实现原子指令那么目的是LOCK什么?遗产?

3)如果MOSI实现原子指令并且MOSI用于所有指令 - 那么为什么原子指令成本太高?当然,性能应该与普通指令相同.

cpu x86 assembly multithreading atomic

6
推荐指数
2
解决办法
1673
查看次数

什么时候CPU可以忽略LOCK前缀并使用缓存一致性?

我原本认为缓存一致性协议(如MESI)可以提供伪原子性,仅限于单个内存加载/存储指令.如果我正在执行获取,修改,写入指令组合,单独的MESI将无法在第一条指令到最后一条指令中强制执行原子性.

但是,英特尔参考手册第3a卷第8节说:

8.1.4 LOCK操作对内部处理器高速缓存的影响

对于P6和更新的处理器系列,如果在LOCK操作期间被锁定的存储器区域被高速缓存在执行LOCK操作作为回写存储器并且完全包含在高速缓存行中的处理器中,则处理器可能不会断言总线上的LOCK#信号.相反,它将在内部修改内存位置并允许其缓存一致性机制,以确保以原子方式执行操作.此操作称为"缓存锁定".缓存一致性机制自动防止缓存相同内存区域的两个或多个处理器同时修改该区域中的数据.

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

这似乎与我的理解相矛盾,暗示LOCK指令不需要使用,因为可以使用缓存一致性?

cpu concurrency x86 multithreading caching

6
推荐指数
1
解决办法
998
查看次数

使用valgrind测量缓存未命中

我有一个关键路径,它在一个线程中执行,固定到一个核心.

我有兴趣确定缓存未命中的位置.环顾四周之后,valgrind的cachegrind工具似乎对我有所帮助.但是,我对此方案中的工具功能有一些疑问:

  1. 提供缓存未命中的位置有多具体?它输出变量名吗?
  2. 我可以只分析一个线程吗?
  3. 是否可以分析代码的特定部分?
  4. 测量缓存未命中的所有功能是否同样适用于TLB未命中?
  5. 我可以将cachegrind与我的发布/优化代码一起使用吗?
  6. 我理解valgrind使用虚拟机进行采样.这种方法有多准确?

问题1是最重要的.

任何有关命令行参数的帮助都是最受欢迎的.

c++ cpu optimization performance valgrind

6
推荐指数
2
解决办法
2676
查看次数