小编Bry*_*Fok的帖子

局部变量vs指针性能

对于下面的代码示例,指针 - num_ptr执行方法"递增"的速度明显慢于局部变量 - num.我认为它与虚拟方法有关,但我不明白为什么.请帮忙解释一下.我试图从这个例子中了解性能问题.

#include <iostream>

const long long iterations_count = 1000000;

// a number interface
struct number {        
    virtual void increment() = 0;
};

struct concrete_number:number
{
    long long a;
    concrete_number(long long p){
        a = p;
    }
    void increment()
    {
        a+=1;
    }
};

int main() {

    concrete_number num(0);
    concrete_number* num_ptr = &num;

    for (long long i = 0; i < iterations_count; i++) {
        num.increment();
    }

    for (long long i = 0; i < iterations_count; i++) {
        num_ptr->increment();
    } …
Run Code Online (Sandbox Code Playgroud)

c++

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

如何从基类调用方法,其中基类是模板参数

我有一个类似下面的c ++类在vc ++工作,但在linux gcc 4.7中不再有用.我不知道如何让它再次运作.

test.h

template<typename a>
class test: public a
{
public:
    void fun();
};
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

template<typename a>
void test<a>::fun()
{
   template_class_method(); <-- this is a public method from template_class 
}
    template class test<template_class>;
Run Code Online (Sandbox Code Playgroud)

template_class.h

class template_class {
public:
    template_class();
    virtual ~template_class();
    void template_class_method();

};
Run Code Online (Sandbox Code Playgroud)

template_class.cpp

#include "templateclass.h"

template_class::template_class() {
    // TODO Auto-generated constructor stub

}

template_class::~template_class() {
    // TODO Auto-generated destructor stub
}

void template_class::template_class_method() {
}
Run Code Online (Sandbox Code Playgroud)

c++

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

什么是可扩展锁?

什么是可扩展锁?它与不可扩展的锁有什么不同?我第一次在TBB rw-lock的环境中看到这个术语,并且无法决定使用哪个.

另外,是否有任何rw锁定优先于读者而不是作家?

c++ locking

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

定义向量的 unordered_map 的最佳方法

std::unordered_map像这样定义一个在性能方面是否相同

unordered_map<int, std::vector<ClassA>>
Run Code Online (Sandbox Code Playgroud)

像这样?

unordered_map<int, std::unique_ptr<std::vector<ClassA>>>
Run Code Online (Sandbox Code Playgroud)

对于std::vector<ClassA>部分中,我使用std::move反正。

c++ vector c++11

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

在x86 cpu上进行比较和交换

例如,在 intel i3、i5、i7 x86 64 位 cpu 上,CAS 是否仅保证 max 上的原子性。8 字节对象大小?

在x86 cpu上,锁定指令被添加到CAS操作中,例如。CMPXCHG,这意味着整个缓存行被锁定以供读取CPU使用,因此 std::atomic::compare_exchange_weak()不会因虚假故障原因而返回故障?

如果在 CAS 操作中使用 x86 cpu lock,如果在共享资源上使用无锁编程而不是使用 std::mutex,性能增益是多少?

例如,如果我想写一个无锁链表。我对头节点的指针进行原子加载,并将其与它进行比较 std::atomic::compare_exchange_weak()以查看是否进行了任何更改。在这种情况下,ABA问题是否适用于x86 cpu?

c++ multithreading cas lock-free

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

c ++ 14 vs 11 - sizeof返回不同的值?

对于同样的程序,c ++ 11返回2 1 2,但对于c ++ 14,返回2 1 1给我.我很迷惑..

#include <iostream>
#include <string>
using namespace std;
int main()
{
    char a[2];
   cout << sizeof(a) << endl; 

   std::string b("a");
   cout << b.size() << endl;


   char c[b.size() + 1];
   cout << sizeof(c) << endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14

3
推荐指数
2
解决办法
357
查看次数

make_index_sequence 如何工作?

我很难理解这部分代码。我知道它会生成一系列数字,来自/sf/answers/1713698031/ 但我无法从中得出逻辑,我需要一些指导方针来完成这个过程。特别是为什么N-1, N-1

template <size_t ...I>
struct index_sequence {};

template <size_t N, size_t ...I>
struct make_index_sequence : public make_index_sequence<N - 1, N - 1, I...> {};

template <size_t ...I>
struct make_index_sequence<0, I...> : public index_sequence<I...> {};
Run Code Online (Sandbox Code Playgroud)

make_index_sequence<sizeof...(T)>()这对的影响是什么do_foo_helper?看起来它只是传递给没有名称的函数,有些东西会有所帮助。

template<typename ...T, size_t ...I>
/* ... */ do_foo_helper(std::tuple<T...> &ts, index_sequence<I...>) {
    std::tie(foo(std::get<I>(ts)) ...);
}

template <typename ...T>
/* ... */ do_foo(std::tuple<T...> &ts) {
    return do_foo_helper(ts, make_index_sequence<sizeof...(T)>());
}
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么在c ++结构中添加填充程序?

填充程序在c ++结构中有什么影响?我经常在一些c ++ api中看到它们.例如:

struct example
{
    unsigned short a;
    unsigned short b;
    char c[3];
    char filler1;
    unsigned short e;
    char filler2;
    unsigned int g;
};
Run Code Online (Sandbox Code Playgroud)

此结构旨在通过网络传输

c c++

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

Java将字符串解析为double

如何将字符串中"00034800"的Double 解析为Double值?最后2位数实际上是小数点,所以我要找的结果是348.00.我可以使用十进制格式这样的格式吗?

java

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

在linux中接收乱序udp数据包

我在linux c ++程序中观察到意外乱序的数据包接收序列.在限制接收套接字的数量后,它再次按顺序接收数据包.另外,我还用boost :: asio或epoll明确地测试了这个问题,但它们都产生了相同的结果.另一方面,在Window环境下(使用boost.asio),同一程序可以正常工作.

我发现相当奇怪,我知道udp协议不保证数据包接收顺序.但是,广播发送方和接收方之间只有1个交换机.因此,我认为,实际上不可能出现故障.加上相同的程序在Window OS(在同一网络下)下工作正常.

假设数据包保证在传输层按顺序到达.额外的序列号检查不是一个选项,更改协议也不是.

c++ udp network-programming epoll boost-asio

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