我知道我可以使用gprof来对我的代码进行基准测试.
但是,我有这个问题 - 我有一个智能指针,具有额外的间接级别(将其视为代理对象).
因此,我有这个额外的层,几乎影响所有功能,并带有缓存的螺丝.
有没有办法测量我的CPU因缓存未命中而浪费的时间?
谢谢!
如果在我的代码中我有以下代码段:
try {
doSomething();
} catch (...) {
doSomethingElse();
throw;
}
Run Code Online (Sandbox Code Playgroud)
抛出会重新抛出默认省略号处理程序捕获的特定异常吗?
例如,在消息中:
foo.exe中0x757bd36f的第一次机会异常:Microsoft C++异常:_ASExceptionInfo在内存位置0x001278cc ..
0x757bd36f和0x001278cc是什么意思?我认为0x757bd36f意味着抛出异常时的EIP,但第二个数字呢?
只是想知道,为什么最好把一个类放在枚举上
肯定扔课程的开销更大?
例如
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或其他东西的类声明一个类.更多代码,更大的二进制......有什么好处?
我们正在将嵌入式应用程序从 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*)。如果我理解正确的话,那就是我们想要的。这可能行得通吗?