小编Tri*_*ock的帖子

涉及编译器重新排序的优化示例

只要as-if规则成立,C&C++编译器就可以重新排序操作.编译器执行此类重新排序的示例是什么,通过这样做可以获得哪些潜在的性能提升?

欢迎在任何平台上涉及任何(C/C++)编译器的示例.

c c++ compiler-optimization

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

C/C++中的嵌套位域

我需要创建一个带有位域的结构来封装来自硬件的一些数据.假设我使用特定于编译器的机制来强制打包和排序,是否可以创建类似于以下的结构(在语法上不正确):

typedef struct _BYTE_OF_DATA
{
    uint8_t Reserved1 : 2;
    struct
    {
        uint8_t BitWithSomeMeaning : 1;
        uint8_t BitWithSomeOtherMeaning : 1;
    } BitsWithMeaning;
    uint8_t Reserved2 : 4;
} BYTE_OF_DATA, *PBYTE_OF_DATA;

static_assert(sizeof(BYTE_OF_DATA) == 1, "Incorrect size");
Run Code Online (Sandbox Code Playgroud)

然后可以按如下方式访问:

BYTE_OF_DATA byteOfData;

byteOfData.Reserved1 = 1;
byteOfData.BitsWithMeaning.BitWithSomeOtherMeaning = 0;
Run Code Online (Sandbox Code Playgroud)

我上面描述的确切方案不起作用,因为我猜结构BitsWithMeaning需要从字节边界开始.我想知道是否有其他技巧可以实现这种"嵌套"的位域.

c c++ bit-fields

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

使用clone()的GDB调试应用程序

是否有GDB的GUI允许我调试使用clone()系统调用创建线程的应用程序?我尝试了Insight和KDBG,但出于某种原因,在创建新的克隆线程时,我无法在线程列表中看到它.克隆系统调用是通过内联汇编调用的.这是不可能的,因为创建的线程与原始进程共享PID?(它有一个独特的TID)

linux debugging multithreading gdb clone

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

在堆上分配异常的任何陷阱?

问题说明了一切:在堆上分配异常是否有任何陷阱?

我问,因为在堆上分配异常,结合多态异常习惯用法,解决了在线程之间传输异常的问题(为了讨论,假设我不能使用exception_ptr).或者至少我认为它确实......

我的一些想法:

  • 异常的处理程序必须捕获异常并知道如何删除它.这可以通过实际抛出auto_ptr适当的删除器来解决.
  • 是否有其他方法跨线程传输异常?

c++ exception-handling exception

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

通过r值参考接收后通过引用传递

我上课了Foo.

我想要一个函数,TakeFoo它接受一个Foo对象并在其上调用方法.这就是我的开始:

void TakeFoo (const Foo&);
Run Code Online (Sandbox Code Playgroud)

但是,我还需要能够在其上调用非const方法.所以我改成它:

void TakeFoo (Foo&);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将临时文件传递给它时会引发警告.所以我创建了一个重载:

void TakeFoo (Foo&&);
Run Code Online (Sandbox Code Playgroud)

但是,我想重用代码,所以TakeFoo(Foo&&)基本上这样做:

void TakeFoo (Foo&& FooBar)
{
    TakeFoo(FooBar);
}
Run Code Online (Sandbox Code Playgroud)

为什么这也没有引起警告,因为我仍在对一个临时的非const引用?

c++ rvalue-reference c++11

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

Python中except语句的排序

如果我有异常类的继承层次结构,并且在一个try块中,如果我想在更一般的异常之前尝试处理更具体的(派生)异常,我是否只是将except派生类的语句放在基类的语句之上班级?

这是我要做的吗?

class MyException(BaseException):
    pass

class AnotherException(MyException):
    pass

try:
    raise AnotherException()
except AnotherException:
    print('Caught YetAnotherException!')
except MyException:
    print('Caught MyException!')

print('Done.')
Run Code Online (Sandbox Code Playgroud)

我已经试过了,它有效,但我很惊讶我找不到任何关于此的文档。

python

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

缺少预期的对象构造

class A
{
public:

    A ()
    {
        wcout << L"Empty constructed." << endl;
    }

    A (LPCWSTR Name)
        : m_Name(Name)
    {
        wcout << L"Constructed." << endl;
    }

    friend void swap (A& Lhs, A& Rhs)
    {
        using std::swap;

        swap(Lhs.m_Name, Rhs.m_Name);
    }

    A (A&& Other)
    {
        wcout << L"Move constructed." << endl;

        swap(*this, Other);
    }

    A (const A& Other)
        : m_Name(Other.m_Name)
    {
        wcout << L"Copy constructed." << endl;
    }

    A& operator= (A Other)
    {
        wcout << L"Assignment." << endl;

        swap(*this, Other);

        return *this; …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

用于执行链路层数据包修改的库

是否有一个库允许我对传入和传出数据包执行链路层数据包修改?

基本上我想根据传入的MAC地址,IP地址,端口等对数据包进行一些转换(例如,更改IP有效负载).我还希望能够对传出的数据包执行相同的操作,即修改数据包在他们离开系统之前.

data-link-layer packet-mangling packet

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

C#属性访问优化

在C#(或VB .NET)中,编译器是否尝试优化属性访问?例如,


public ViewClass View
{
    get
    {
        ...
        Something is computed here
        ....
    }
}

if (View != null)
    View.Something = SomethingElse;


我想如果编译器可以某种方式检测到View两次访问之间保持不变,它可以避免计算两次值.是否进行了这些优化?

我知道如果View有一些密集的计算,它可能应该重构为一个函数(GetView()).在我的特定情况下,View涉及攀爬视觉树寻找特定类型的元素.

相关:关于(Microsoft)C#编译器的工作原理的任何参考?

.net c# compiler-construction optimization

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

ifstreams矢量

如何创建和操作ifstreams的向量?

像这样的东西,除了这不起作用:

vector<ifstream> Files(10, ifstream());
Files[0].open("File");
Run Code Online (Sandbox Code Playgroud)

c++ vector ifstream

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