可能重复:
你最喜欢的分析工具是什么(适用于C++)
是否有任何好的工具来分析混合了C和C++的源代码.有什么优点和缺点,你使用过哪些,并建议使用.请不要给我一个谷歌工具列表.我也可以这样做,我想要的是利用使用这些工具的人的个人经验并了解他们的利弊.
提前致谢.
在考虑软件工程的同时,我遇到了一个问题,为什么我们没有看到编写/记录代码的方式有任何改进.
想一想:自从我们从穿孔卡转向文本编辑以来,没有一个革命性的改进.我见过的最后一项改进是语法高亮和上下文敏感的帮助(例如Intellisense或ctags).不是我称之为革命性的东西.
这让我想知道:为什么会这样?
我会从错过的东西开始:
您能想到什么会使您的编码/文本编辑/文档任务更容易?
有时CPU占用大部分时间的循环经常会有一些分支预测错误(错误预测)(接近0.5概率).我在非常孤立的线程上看到了一些技术但从未列出过.我所知道的那些已经解决了条件可以变为bool并且以某种方式使用0/1来改变的情况.是否有其他可以避免的条件分支?
例如(伪代码)
loop () {
if (in[i] < C )
out[o++] = in[i++]
...
}
Run Code Online (Sandbox Code Playgroud)
可以用这样的东西重写,可能会失去一些可读性:
loop() {
out[o] = in[i] // copy anyway, just don't increment
inc = in[i] < C // increment counters? (0 or 1)
o += inc
i += inc
}
Run Code Online (Sandbox Code Playgroud)
此外,我已经看到在野外的技术在某些情况下在有条件的情况下改变&&,&现在正在逃避我的思想.我是这个优化级别的新手,但确实感觉还有更多.
如何有效(及时)计算C中字符串的长度?
现在我正在做:
int calculate_length(char *string) {
int length = 0;
while (string[length] != '\0') {
length++;
}
return length;
}
Run Code Online (Sandbox Code Playgroud)
但是与strlen()相比它很慢,例如,有没有其他方法可以做到这一点?
谢谢.
编辑:我在一个独立的环境中工作,我不允许使用任何外部库,包括"string.h".
想知道stackoverflow社区对各种免费和非免费的Java Profilers和分析工具的看法.
现在我总是听说二进制搜索树比随机选择的数据更快地构建,而不是有序数据,因为有序数据需要显式重新平衡以保持树高最小.
最近我实现了一个不可变的treap,一种特殊的二叉搜索树,它使用随机化来保持自己相对平衡.与我的预期相反,我发现我可以持续建立一个快速约2倍的treap,并且通常比有序数据更好地平衡 - 而且我不知道为什么.
这是我的treap实现:
这是一个测试程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static Random rnd = new Random();
const int ITERATION_COUNT = 20;
static void Main(string[] args)
{
List<double> rndTimes = new List<double>();
List<double> orderedTimes = new List<double>();
rndTimes.Add(TimeIt(50, RandomInsert));
rndTimes.Add(TimeIt(100, RandomInsert));
rndTimes.Add(TimeIt(200, RandomInsert));
rndTimes.Add(TimeIt(400, RandomInsert));
rndTimes.Add(TimeIt(800, RandomInsert));
rndTimes.Add(TimeIt(1000, RandomInsert));
rndTimes.Add(TimeIt(2000, RandomInsert));
rndTimes.Add(TimeIt(4000, RandomInsert));
rndTimes.Add(TimeIt(8000, RandomInsert));
rndTimes.Add(TimeIt(16000, RandomInsert));
rndTimes.Add(TimeIt(32000, RandomInsert));
rndTimes.Add(TimeIt(64000, RandomInsert));
rndTimes.Add(TimeIt(128000, RandomInsert));
string rndTimesAsString = string.Join("\n", rndTimes.Select(x …Run Code Online (Sandbox Code Playgroud) 我正在使用C#(这个问题也适用于像C++这样的类似语言),我试图找出最快,最有效的增量方法.在我的游戏中,它不仅仅是一个或两个增量,而是每秒300个增量.就像屏幕上每个精灵的帧都在递增,我的RPG角色的速度和位置,相机的偏移等等.所以我在想,最有效的方法是什么?例如,y_pos我可以做的每次运动增加5 :
1.
Player.YPos += 5;
Run Code Online (Sandbox Code Playgroud)
2.
Player.YPos = Player.YPos + 5;
Run Code Online (Sandbox Code Playgroud)
3.
for (int i = 0; i < 5; i++)
{
Player.YPos++;
}
Run Code Online (Sandbox Code Playgroud)
哪个是最有效的(也是最快的)?
我有一个程序,我从C移植到Java.两个应用程序都使用快速排序来订购一些分区数据(基因组坐标).
Java版本运行速度很快,但我想让它更接近C版本.我正在使用Sun JDK v6u14.
显然我无法与C应用程序保持一致,但我想了解我能做些什么来尽可能地提高性能(在环境范围内).
我可以做些什么来测试应用程序的不同部分,内存使用情况等的性能?具体来说,我该怎么办?
另外,我可以实现哪些技巧(通常)来更改类和变量的属性和组织,减少内存使用并提高速度?
编辑:我使用Eclipse,显然更喜欢任何第三方工具的免费选项.谢谢!
用C实施OO状代码封装和多态的一种常见的方法是不透明的指针返回到含有一些函数指针的结构.这是一个非常频繁的模式,例如在Linux内核中.
使用函数指针,而不是函数调用引入了开销,这是由于缓存大多可以忽略不计,因为已经在其他问题进行讨论.
但是,对于GCC(> 4.6)的新-fwhole-program和-flto优化选项,情况会发生变化.
#include <stdlib.h>
#include "libPointers.h"
void do_work(struct worker *wrk, const int i)
{
wrk->datum += i;
}
struct worker *libPointers_init(const int startDatum)
{
struct worker *wrk = malloc (sizeof (struct worker));
*wrk = (struct worker) {
.do_work = do_work,
.datum = startDatum
};
return wrk;
}
Run Code Online (Sandbox Code Playgroud)
#ifndef __LIBPOINTERS_H__
#define __LIBPOINTERS_H__
struct worker {
int datum;
void (*do_work)(struct worker *, int i);
};
extern void do_work (struct worker *elab, const int i);
struct worker *libPointers_init(const int …Run Code Online (Sandbox Code Playgroud)