相关疑难解决方法(0)

什么是调试优化的C/C++程序的有效方法?

很多时候我使用优化代码(有时甚至涉及矢量化循环),其中包含错误等.如何调试这样的代码?我正在寻找任何类型的工具或技术.我使用以下(可能是过时的)工具,所以我想升级.

我使用以下内容:

  • 既然用ddd,就看不到代码了,我用gdb + dissambler命令查看生成的代码; 我不能真正使用它来完成程序.
  • ndisasm

谢谢

c c++ debugging disassembly

14
推荐指数
2
解决办法
4492
查看次数

全局变量性能影响(c,c ++)

我目前正在开发一种非常快速的算法,其中一部分是极快的扫描和统计功能.在这个任务中,我追求任何性能优势.因此,我也有兴趣保持代码"多线程"友好.

现在的问题是:我注意到将一些非常频繁访问的变量和数组放入"全局"或"静态本地"(它们都是相同的),有一个可衡量的性能优势(在+ 10%的范围内) .我试图理解为什么,并找到一个解决方案,因为我宁愿避免使用这些类型的分配.请注意,我不认为差异来自"分配",因为在堆栈上分配一些变量和小数组几乎是瞬间完成的.我相信差异来自"访问"和"修改"数据.

在这次搜索中,我发现了stackoverflow的这篇旧帖子: 全局变量的C++性能

但我对那里的答案感到非常失望.很少解释,大多是咆哮"你不应该这样做"(嘿,这不是问题!)和非常粗略的陈述,如'它不影响性能',这显然是不正确的,因为我用精确测量它基准工具.

如上所述,我正在寻找解释,并且,如果存在,则解决此问题.到目前为止,我已经感觉到计算本地(动态)变量的内存地址比全局(或本地静态)花费更多.也许类似于ADD操作差异.但这无助于找到解决方案......

c performance benchmarking static global

14
推荐指数
2
解决办法
9073
查看次数

编写更短的代码/算法,效率更高(性能)?

在网站周围遇到代码高尔夫琐事之后,显然人们试图找到在字符,线条和总大小方面尽可能短的编写代码和算法的方法,即使这意味着写下这样的东西:

    //Code by: job
    //Topic: Code Golf - Collatz Conjecture
    n=input()
    while n>1:n=(n/2,n*3+1)[n%2];print n
Run Code Online (Sandbox Code Playgroud)

所以作为初学者,我开始怀疑尺寸是否真正重要:D

这显然是一个非常主观的问题,高度依赖于所使用的实际代码,但现实世界中的经验法则是什么.

在尺寸不重要的情况下,那么我们怎么不关注性能而不是尺寸呢?

performance

13
推荐指数
3
解决办法
2864
查看次数

如何配置在FreeBSD上运行的连续运行的服务器

可能重复:
在终止进程之前保存gmon.out

我正在尝试在Linux环境中分析服务器(可用的源代码.c代码).该服务器像Web服务器一样连续运行.我正在尝试使用gprof来配置服务器.如果服务器自行退出,则会生成gmon.out文件.我可以使用gprof和gmon.out来理解配置文件数据.现在问题是,这台服务器正在连续运行,等待传入的套接字连接,请求等.如果我终止此服务器,则不会生成gmon.out.此时我看到以下选项.

  1. 将源代码更改为配置文件本身,并在收到SIGKILL信号后记录此信息.这是迄今为止最丑陋的解决方案,可能会在测量中引入噪声.
  2. 也许在服务器仍在运行时,有一种方法可以使用gprof来配置此服务器.
  3. 尝试其他工具?

编辑:服务器是多进程服务器.在FreeBSD 7.2上运行

我敢肯定,人们之前已经解决了这些问题.我没能在SO或外面找到有用的信息.

我感谢人们的任何想法/解决方案.

谢谢一堆.

更新1:

  1. gprof似乎不适用于多进程服务器.当我在执行我的服务器后设法获得gmon.out时,只有父进程被检测,实际上并没有真正的工作!
  2. oProfile不支持我的服务器运行的FreeBSD.由于各种原因,我不能(不允许)更改操作系统.
  3. Valgrind网站没有FreeBSD的端口.但是有一些对FreeBSD端口的引用.我找不到FreeBSD端口源代码.

不知怎的,我设法为valgrind获得端口.当我运行make时,我得到以下错误.

=> valgrind-stable-352.tar.gz doesn't seem to exist in /usr/obj/ports/distfiles/.
=> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
fetch: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/valgrind-stable-352.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://www.rabson.org/.
fetch: http://www.rabson.org/valgrind-stable-352.tar.gz: No address record
=> Couldn't fetch it - please try to retrieve this
=> port manually into /usr/obj/ports/distfiles/ and try again.
*** Error code 1
Run Code Online (Sandbox Code Playgroud)

我试图在网上找到valgrind-stable-352.tar.gz.我找到的所有链接都已死亡.

  1. 我在我的freebsd上安装了pstack,实现的pstack只提供堆栈跟踪.参考:http://sourceforge.net/projects/bsd-pstack/

  2. 我的理解是systemtap仅用于内核空间事件,仪器等. …

c profiling gprof

13
推荐指数
2
解决办法
2192
查看次数

用Java设计高性能状态机

我正在开始编写Java库来实现高性能的有限状态机.我知道那里有很多库,但是我想从头开始编写自己的库,因为几乎所有的库都构建了自动机,这些自动机被优化为一次只处理一个.

我想知道SO社区中涉及状态机设计的人员在实现像这样的高性能库时最重要/最好的设计原则是什么.

注意事项

  1. 生成的自动机通常不是很大的.(约100-500州).
  2. 实现应该能够扩展.
  3. 实现应该能够实现快速转换(最小化,确定等).
  4. 希望实施DFA,NFA,GNFA,PDA和可能的Tree Automata.希望在可能的情况下在单一界面下.
  5. 应该在内存使用和性能之间取得良好的平衡.

目前关于设计的当前问题是:

  1. 应该上课State,SymbolTransition定义?或者应该使用"隐藏的"内部结构.我个人认为使用类本会浪费大量内存,因为相同的信息可以以更加浓缩的形式存储.但是,这是否可以实现更快的转换?它是否有任何其他优点/缺点?

  2. 在内部存储数据的最佳方法是什么?使用类似的数据结构HashMapHashSet启用分摊的常量时间查找,但是存在涉及的开销元素.这是最好的方法吗?将转换信息存储为原始(或非)数组似乎浪费了相当多的内存.特别是当库需要一次处理大量自动机时.不同数据结构的优缺点是什么?

我很感激任何意见.谢谢!

java performance fsm

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

递增:x ++ vs x + = 1

我已经读过很多开发人员使用x + = 1而不是x ++来清楚.我知道x ++对于新开发人员来说可能不明确,而且x + = 1总是更清晰,但两者之间的效率是否存在差异?

使用for循环的示例:

for(x = 0; x < 1000; x += 1) VS for(x = 0; x < 1000; x++)

我知道它通常不是那么大的交易,但如果我反复调用一个执行这种循环的函数,它可能会在长期内累加起来.

另一个例子:

while(x < 1000) {
    someArray[x];
    x += 1;
}
Run Code Online (Sandbox Code Playgroud)

VS

while(x < 1000) {
    someArray[x++];
}
Run Code Online (Sandbox Code Playgroud)

可以用x + = 1代替x ++而不会造成任何性能损失吗? 我特别关注第二个例子,因为我使用两行而不是一行.

如何增加数组中的项?会someArray[i]++someArray[i] += 1在大循环中完成时更快吗?

arrays optimization increment

13
推荐指数
2
解决办法
6227
查看次数

如何显示在仪器时间分析器中调用函数的次数

我已经尝试了所有可能的字段,但无法找到调用函数的次数.

在此输入图像描述

此外,我没有得到Self# Self.这两个数字是什么意思?

macos xcode profiling instruments ios

13
推荐指数
2
解决办法
8305
查看次数

优化!- 它是什么?怎么做?

听到"高度优化的代码"或某些开发人员需要优化他们和诸如此类的东西,这是常见的.然而,作为一个自学成才的新程序员,我从来没有真正理解人们在谈论这些事情时究竟是什么意思.

关心一般的想法呢?此外,推荐一些阅读材料,无论你想在这件事上说什么.随意咆哮和讲道.

language-agnostic theory algorithm optimization

12
推荐指数
4
解决办法
725
查看次数

Linux上的性能分析

在*nix上分析C/C++应用程序的最佳工具是什么?

(我希望能够分析一个混合了(阻塞)文件IO,epoll for network和fork()/ execv()的服务器来解决一些繁重的问题;但是一般的帮助和更一般的工具都很受欢迎.)

您是否可以在一个概述中获得RAM,CPU,网络和磁盘的大系统图片,并深入研究它?

内核列表上有很多关于类似事情的讨论perf timechart,但我还没有发现Ubuntu中出现过任何问题.

c c++ unix linux performance

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

有没有办法在Visual Studio中记录和回放编码会话?

我读过Robert Martin的"清洁代码",它在80年代的Emacs中已经能够录制和播放你的编码会话.
我刚刚意识到我从这种练习中学到了多少,我很想了解自己!

但是我真的不认为录制屏幕(如视频)会非常有效,特别是因为Visual Studio已经无法忍受的速度慢,而且在播放器中寻找视频也很无聊.

相反,有一些插件可以记录我编码的内容(所以不是调试和视觉设计师等)真的很棒,并且可以回放给我看看我有多吮吸和在哪里.

这可能吗?

编辑:只是从书中引用,以显示这可能是多么有趣:

鲍勃进入模块.
他向下滚动到需要改变的功能.
考虑到他的选择,他停顿了一下.
哦,他正在向上滚动到模块的顶部以检查变量的初始化.
现在他向下滚动并开始输入.
哎呀,他正在抹掉他打字的东西!
他再次打字.
他再次擦掉它!
他输入了其他一半的东西但随后删除了!
他向下滚动到另一个函数,该函数调用他正在改变的函数以查看它是如何被调用的.
他向上滚动并键入他刚删除的相同代码.
他停顿了一下.
他再次删除了那段代码!
他弹出另一个窗口,看着一个子类.这个功能被覆盖了吗?

...

profiling keylogger visual-studio

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