相关疑难解决方法(0)

Linux C++:如何分析由于缓存未命中而浪费的时间?

我知道我可以使用gprof来对我的代码进行基准测试.

但是,我有这个问题 - 我有一个智能指针,具有额外的间接级别(将其视为代理对象).

因此,我有这个额外的层,几乎影响所有功能,并带有缓存的螺丝.

有没有办法测量我的CPU因缓存未命中而浪费的时间?

谢谢!

c++ linux profiling caching

44
推荐指数
6
解决办法
3万
查看次数

抛出一个catch省略号(...)重新抛出C++中的原始错误?

如果在我的代码中我有以下代码段:

try {
  doSomething();
} catch (...) {
  doSomethingElse();
  throw;
}
Run Code Online (Sandbox Code Playgroud)

抛出会重新抛出默认省略号处理程序捕获的特定异常吗?

c++ exception ellipsis throw

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

"第一次机会异常......"消息中的十六进制数字是什么意思?

例如,在消息中:

foo.exe中0x757bd36f的第一次机会异常:Microsoft C++异常:_ASExceptionInfo在内存位置0x001278cc ..

0x757bd36f和0x001278cc是什么意思?我认为0x757bd36f意味着抛出异常时的EIP,但第二个数字呢?

c++ exception-handling first-chance-exception

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

为什么要在枚举上放一个课?

只是想知道,为什么最好把一个类放在枚举上

肯定扔课程的开销更大?

例如

enum MyException
{
   except_a,
   except_b,
   except_c
}


void function f(){
  throw a;
}


int main(int arc, char* argv[]){

  try{

  } catch (MyException e){
    switch(e){
      except_a: break;
      except_b: break;
      except_c: break;
    }
  }

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

除了开销.我还需要为每个可能覆盖std :: exception或其他东西的类声明一个类.更多代码,更大的二进制......有什么好处?

c++ exception-handling

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

在软件中实现线程本地存储

我们正在将嵌入式应用程序从 Windows CE 移植到不同的系统。当前的处理器是STM32F4。我们当前的代码库大量使用 TLS。新原型运行的是 KEIL CMSIS RTOS,其功能大大减少。

http://www.keil.com/support/man/docs/armcc/armcc_chr1359124216560.htm上,它说从5.04开始支持线程本地存储。现在我们使用的是5.04。问题是,当将我们的程序与__thread int a;链接器的变量定义链接时,无法找到__aeabi_read_tp对我来说有意义的。

我的问题是:是否有可能实施__aeabi_read_tp并且会起作用,还是还有更多的内容?

如果这对我们来说根本不可能:有没有办法仅在软件中实现 TLS?我们暂时不讨论那里的性能。

编辑__aeabi_read_tp我尝试通过查看旧的 freeBSD 源和其他源来 实现。虽然该函数主要是在汇编中实现的,但我发现了一个 C 版本,可归结为:

extern "C"
{
    extern osThreadId svcThreadGetId(void);
    void *__aeabi_read_tp()
    {
        return (void*)svcThreadGetId();
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上所做的就是给我当前正在执行的线程的 ID (void*)。如果我理解正确的话,那就是我们想要的。这可能行得通吗?

c++ multithreading

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