假设下面的一段代码
struct S {
S(int & value): value_(value) {}
int & value_;
};
S function() {
int value = 0;
return S(value); // implicitly returning reference to local value
}
Run Code Online (Sandbox Code Playgroud)
编译器不会产生警告(-Wall),这个错误很难捕获.
有哪些工具可以帮助解决这些问题
我在Valgrind得到这个.
--24101-- REDIR: 0xbb20580 (operator delete(void*)) redirected to 0x93b7d48 (operator delete(void*))
--24101-- REDIR: 0xbb22580 (operator new[](unsigned long)) redirected to 0x93b88b7 (operator new[](unsigned long))
==24101== WARNING: new redirection conflicts with existing -- ignoring it
--24101-- new: 0x15632010 (__GI_strlen ) R-> 0x093b96b0 strlen
--24101-- REDIR: 0xbb205c0 (operator delete[](void*)) redirected to 0x93b79c4 (operator delete[](void*))
Run Code Online (Sandbox Code Playgroud)
有什么顾虑吗?
在我的c/c ++文件中,有多个#define.举个例子:
#ifdef LIBVNCSERVER_HAVE_LIBZ
/* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
/* some more code */
Run Code Online (Sandbox Code Playgroud)
你能否告诉我如何修改我的Makefile.in以便在编译期间在所有文件中都有#define ?
谢谢.
为了澄清术语,yield是线程放弃时间片的时间.我感兴趣的平台是POSIX线程,但我认为这个问题很普遍.
假设我有消费者/生产者模式.如果我想扼杀消费者或生产者,哪个更好用,睡觉还是产量?我最感兴趣的是使用这两种功能的效率.
我做了一些沉重的数字训练,对我而言,浮点性能非常重要.我非常喜欢英特尔编译器的性能,并且它对产生的组件质量非常满意.
我想在某种程度上尝试C++ 0x主要用于糖部分,比如auto初始化列表等,还有lambdas.在这一点上,我通过boost在常规C++中使用这些功能.
编译器C++ 0x生成的汇编代码有多好?特别是英特尔和gcc编译器.他们生产SSE代码吗?性能是否与C++相当?有没有基准?
我的谷歌搜索没有透露太多.
谢谢.
ps:在某些时候我将自己测试它,但想知道相对于C++会发生什么.
一般情况下(或根据您的经验),for循环和while循环之间的性能是否存在差异?
如果它们是双重/三重嵌套怎么办?
矢量化(SSE)是否受g ++或英特尔编译器中的循环变量的影响?
谢谢
我喜欢将现有的软件项目作为学习和新想法的来源.这样做我发现了我认为不可能的事情
在您看来,您使用/开发/扩展的最先进的C++项目是什么?你能说出为什么你认为它是最先进的原因以及你可以从中学到什么.
我的最新热潮是boost :: phoenix,http://www.boost.org/doc/libs/1_43_0/libs/spirit/phoenix/doc/html/index.html,这是一个非常全面的函数式编程库.尽管它具有其功能,但它非常简单且易于扩展.经过一些调整后,我能够在2周内编写多线程lambda并行循环和数学领域特定语言.
你的是什么?(请不要只说提升,因为它是项目的巨大收藏)
我的问题是关于Java与编译代码的性能,例如高性能数值应用程序中的C++/fortran/assembly.我知道这是一个有争议的话题,但我正在寻找具体的答案/例子.社区维基.我之前曾问过类似的问题,但我认为我把它广泛地提出来并没有得到我想要的答案.
双精度矩阵矩阵乘法,通常称为blas库中的dgemm,能够实现接近100%的峰值CPU性能(就每秒浮动运算而言).
有几个因素可以实现这种表现:
缓存阻塞,实现最大内存局部性
循环展开以最小化控制开销
矢量指令,例如SSE
记忆预取
保证没有内存别名
我已经看过许多使用程序集,C++,fortran,Atlas,供应商BLAS的基准测试(典型情况是维度512及以上的矩阵).另一方面,我听说过Java的主要字节编译语言/实现可以快速或几乎与机器编译语言一样快.但是我还没有看到明确的基准测试表明它是如此.相反,似乎(根据我自己的研究)字节编译语言要慢得多.
你有没有很好的Java/C#矩阵矩阵乘法基准?实时编译器(实际实现,而不是假设)能够产生满足我列出的点的指令吗?
谢谢
关于性能:每个CPU都具有峰值性能,具体取决于处理器每秒可执行的指令数量.例如,现代2 ghz Intel CPU可以实现80亿双精度加/减一秒,从而产生8 gflops的峰值性能.矩阵矩阵乘法是能够在每秒操作次数方面实现几乎完全性能的算法之一,主要原因是计算内存操作的比率更高(N^3/N^2).数字我对订单上的某些东西感兴趣N > 500.
关于实现:阻塞等更高级别的细节是在源代码级别完成的.较低级别的优化由编译器处理,可能还有关于对齐/别名的编译器提示.字节编译的实现也可以使用块方法编写,因此原则上用于体面实现的源代码细节将非常相似.
有没有办法定义使用typedef integral/float类型,这意味着没有别名?
相当于(但原始构造)的东西:
template < typename T >
struct restrict { T* __restrict data; };
Run Code Online (Sandbox Code Playgroud)
作为相关的问题,是否可以问gcc它确定别名/指针的别名是什么?
Java程序员和API似乎更喜欢显式的set/get方法.
但是我得到了C++社区对这种做法不满的印象.如果是这样,是否有一个特殊的原因(除了更多的代码行)为什么会这样?
另一方面,为什么Java社区选择使用方法而不是直接访问?
谢谢
c++ ×7
c ×3
performance ×3
java ×2
autotools ×1
c++11 ×1
conventions ×1
debugging ×1
for-loop ×1
g++ ×1
makefile ×1
optimization ×1
reference ×1
sleep ×1
valgrind ×1
while-loop ×1
yield ×1