小编Kod*_*ior的帖子

(x ^ 0x1)!= 0是什么意思?

我遇到了以下代码段

if( 0 != ( x ^ 0x1 ) )
     encode( x, m );
Run Code Online (Sandbox Code Playgroud)

什么x ^ 0x1意思?这是一些标准技术吗?

c c++ bit-manipulation bitmask

183
推荐指数
12
解决办法
2万
查看次数

Python中的Modulo运算符

以下代码中的模数是做什么的?

from math import *
3.14 % 2 * pi
Run Code Online (Sandbox Code Playgroud)

我们如何计算浮点数的模数?

python operators python-3.x

53
推荐指数
2
解决办法
37万
查看次数

C++ Cast的实现

我在CodeProject中浏览了一些代码,并遇到了以下C++转换代码.

template <class OutputClass, class InputClass>
union horrible_union{
    OutputClass out;
    InputClass in;
};
template <class OutputClass, class InputClass>
inline OutputClass horrible_cast(const InputClass input){
    horrible_union<OutputClass, InputClass> u;
    u.in = input;
    return u.out;
}
Run Code Online (Sandbox Code Playgroud)

为什么演员以上述方式实施.为什么我们不能只做一个手动演员.有人可以举例说明正常演员何时不能奏效?

c++ casting unions

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

在基准测试时防止编译器优化

我最近遇到了这个辉煌的cpp2015演讲CppCon 2015:Chandler Carruth"调优C++:基准测试,CPU和编译器!哦,我的!"

提到的阻止编译器优化代码的技术之一是使用以下函数.

static void escape(void *p) {
  asm volatile("" : : "g"(p) : "memory");
}

static void clobber() {
  asm volatile("" : : : "memory");
}

void benchmark()
{
  vector<int> v;
  v.reserve(1);
  escape(v.data());
  v.push_back(10);
  clobber()
}
Run Code Online (Sandbox Code Playgroud)

我试图理解这一点.问题如下.

1)越过clobber逃脱的好处是什么?

2)从上面的例子看起来,clobber()可以防止先前的语句(push_back)被优化.如果是这样的话,为什么下面的代码片段不正确?

 void benchmark()
 {
     vector<int> v;
     v.reserve(1);
     v.push_back(10);
     clobber()
 }
Run Code Online (Sandbox Code Playgroud)

如果这不够混乱,那么愚蠢(FB的线程化lib)就会有一个更奇怪的实现

相关片段:

template <class T>
void doNotOptimizeAway(T&& datum) {
  asm volatile("" : "+r" (datum));
}
Run Code Online (Sandbox Code Playgroud)

我的理解是上面的片段通知编译器程序集块将写入数据.但是如果编译器发现没有这个数据的消费者,它仍然可以优化生成数据的实体吗?

我认为这不是常识,任何帮助表示赞赏!

c++ gcc clang performance-testing compiler-optimization

10
推荐指数
2
解决办法
2296
查看次数

静态库加载两次

我有共享对象A.so,它静态链接到libssl.a和另一个共享对象B.so,它也静态链接libssl.a.

A.so和B.so在GLOBAL范围内有来自libssl.a的符号.我通过readelf -s A.so检查了这个

我有一个可执行的a.out加载A.so和B.so. 当a.out终止时,我在A.so中的libssl.a中的一个符号中得到双重自由错误.

即使libssl.a静态链接到每个共享对象,由于它们全局公开,因此可能共享相同的符号而不是选择它的本地副本.

这是什么解决方法?如何在这里制作符号?

请帮忙

c linker static-libraries double-free static-linking

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

环回接口MTU的意义

我正在探索/基准测试用于同一系统中两个进程之间低延迟通信的各种 IPC 机制。我正在使用 RHEL 6 系统进行基准测试。

我目前正在研究通过环回的基于套接字的通信。由于它是环回设备,因此数据包甚至不会命中 NIC。相反,环回 linux 驱动程序将数据包环回到目的地。

但是查看 的结果netstat -i,我看到为环回定义了一个 MTU。这有什么作用以及对带宽的潜在影响是什么?

Name  Mtu   Network       Address            Ipkts Ierrs    Opkts Oerrs  Coll
lo0   16384 localhost   ::1                   1738     -     1738     -     -
Run Code Online (Sandbox Code Playgroud)

linux tcp ipc linux-kernel

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

相关负载在CPU中重新排序

我一直在阅读内存障碍:软件黑客的硬件视图,这是Paul E. McKenney的一篇非常受欢迎的文章.

本文强调的一点是,像Alpha这样非常微弱有序的处理器可以重新排序依赖负载,这似乎是分区缓存的副作用

论文摘录:

1 struct el *insert(long key, long data)
2 {
3     struct el *p;
4     p = kmalloc(sizeof(*p), GPF_ATOMIC);
5     spin_lock(&mutex);
6     p->next = head.next;
7     p->key = key;
8     p->data = data; 
9     smp_wmb();
10    head.next = p;
11    spin_unlock(&mutex);
12 }
13
14 struct el *search(long key)
15 {
16     struct el *p;
17     p = head.next;
18     while (p != &head) {
19         /* BUG ON ALPHA!!! */
20         if (p->key …
Run Code Online (Sandbox Code Playgroud)

synchronization locking cpu-architecture lock-free memory-barriers

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

Linux over commit heuristic

来自内核文档的过度提交文章提到过度提交模式0基于启发式提交处理.它没有概述所涉及的启发式.

有人可以阐明实际的启发式是什么吗?任何与内核源相关的链接也都有效!

linux memory-management linux-kernel

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

使其中一个继承的受保护成员成为私有

class A
{
protected:
    int m_a;
    int m_b;
};

class B: public A
{
};
Run Code Online (Sandbox Code Playgroud)

在B级我想m_a私人.以下是正确的方法吗?

class B:public A
{    
private:
    int m_a;
};
Run Code Online (Sandbox Code Playgroud)

这不会导致2份副本m_a吗?

c++ inheritance

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

在乘以2个const整数时澄清decltype输出

int main()
{
 const int a = 1;
 const int b = 2;
 typedef decltype(a*b) multiply_type;
 cout << typeid(multiply_type).name() << endl;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序的返回值是multiply_type是int.我很惊讶.我期望类型推导产生const int,并且由于表达式产生pr值,因此结果类型将是const int.

PS:使用auto时,返回值将为int,因为它会删除const限定符.

任何想法为什么multiply_type是int而不是带有decltype的const int?

编辑:添加了一个与cv-qualifier相关的附加示例.

#include<iostream>
#include<typeinfo>


using namespace std;

struct Details
{
    int m_age;
};

int main()
{
 const Details* detail = new Details();
 typedef decltype((detail->m_age)) age_type;
 cout << typeid(age_type).name() << endl;

 int a = 1;
 age_type age = a;
 age = 10; // This is not possible. Read only. 
 cout << typeid(age).name() …
Run Code Online (Sandbox Code Playgroud)

c++ decltype c++11 c++14

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