小编Avi*_*ano的帖子

C++ 中的日志记录(性能考虑)

我是cpp新手(来自Java)。我正在写一个cpp应用程序。该应用程序的性能至关重要。我寻找了一个日志框架,并 在上面链接的末尾找到了log4cxx ,其中有性能部分解释:

当完全关闭日志记录或仅关闭一组级别的日志记录时,日志请求的成本包括方法调用加上整数比较

我记得在大学时代,我们使用 with#ifndf来包装伐木。

问题:

  1. 使用包装日志记录#ifndf仍然是标准做法吗?

  2. 是否有类似下面的伪代码?

logger.Log_Debug(() => { "My complicated log message " + thisFunctionTakesALongTime() + " will take no time" });
Run Code Online (Sandbox Code Playgroud)

c++ debugging performance logging

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

当您通过引用返回对象时,您何时需要担心该对象将被销毁?

你有以下几点:

Person& getPersonByName(string name);
Run Code Online (Sandbox Code Playgroud)

在什么情况下你需要担心一旦方法结束就会破坏getPersonByName中的返回者,这样调用者方法就可以处理被破坏的数据?

谢谢

c++

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

将unsigned char*复制到unsigned char*

我需要保存数据包状态一段时间.所以我读取了表示为unsigned char*的数据包数据,而不是用这个数据创建一个记录,并将记录保存在列表中一段时间​​.

这将是更好的方式将记录中的数据包表示为char*或char [].

如何将读取数据(unsigned char )复制到两个选项:unsigned char []和unsigned char*

我需要复制数据,因为每次我读取数据包时都会被重新加入相同的char*,所以当我保存一段时间后我需要先复制数据

c++

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

如何返回可以更改的成员?

多线程环境.Foo的内容可以是多线程的.

class Foo
{
public:
   const A & getA() {return a_;} //has guard
   void setA(A newA){a_ = newA;} //has guard

private:
    A a_;
};
Run Code Online (Sandbox Code Playgroud)

呼叫者:

A a  = foo.getA();
Run Code Online (Sandbox Code Playgroud)

另一个问题,我问有人告诉我, 如果你返回const&它保证变量的生命时间将延长到参考的生命周期 ,所以根据这个我不需要复制值,我安全即使调用setA on foo在我打电话给getA之后就完成了,但是反对它的很多争论都被araised了,所以我觉得这不正确.

我想保持安全,所以我将签名更改为:

A & getA() {return a_;}
Run Code Online (Sandbox Code Playgroud)

但是编译器仍然警告我已经引用了局部变量.我不明白为什么,因为据我所知(cpp新手),返回值是foo.a的副本,那么问题是什么呢?

我并不担心改变a_内容.(_ a.age = 4).我担心呼叫设置,呼叫者中的'a'将是非法的

c++

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

如何在c ++中设置数组

我有一个课堂

char chars[4]
Run Code Online (Sandbox Code Playgroud)

我想在构造函数中初始化此字段.
我的构造函数需要char chars[]作为参数获取,并且在构造函数调用中我想要初始化我的类字段.
我可以这样做,还是需要打电话给副本?

c++

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

c ++线程安全累加器

我需要根据分钟间隔监控内部流量,所以我决定做这样的事情:

Flow{
   void send();
   static uint accumulator;
}

//Only single thread call to send
void Flow::sendPacket(pck){
   accumulator+=pck.size();
   do();
}

//Only single thread call to monitor . **No the same thread that call to send!**
Monitor::monitor(){
   //Start monitor
   Flow::accumulator = 0;
   sleep(60);
   rate  = accumulator/60;
}
Run Code Online (Sandbox Code Playgroud)

我可以在没有使用原子的情况下初始化为0的风险不会发生吗?

我担心的是,即使是原子也不会保证init,因为如果同时监视init为0并且同时使用旧值进行累积,则新累积值将基于旧值而不是init值.

另外我关注原子惩罚.每个数据包都会调用send.

c++ multithreading

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

Python为什么变量和返回显示来自打印变量的差异值?

>>> pkt = sniff(count=2,filter="tcp")
>>> raw  = pkt[1].sprintf('%Padding.load%')
>>> raw
"'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'"


>>> print raw
'\x04\x00\x00\x00\x00\x00\x00\x00g\xc4|\x00\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

使用打印时的原始产量不同输出

python

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

c ++计数器类型,不需要锁定增量

我需要一个小柜台(最多10个).

我不想使用原子(因为原子的开销).

我可以使用哪种类型?

我可能会过早优化,但不幸的是我现在无法模拟完整的生产环境(多线程环境).

在Ubuntu x86上运行

c++ multithreading

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

标签 统计

c++ ×7

multithreading ×2

debugging ×1

logging ×1

performance ×1

python ×1