草庐IT

c++ - GCC内存泄漏检测相当于微软crtdbg.h?

在多年使用VisualStudio中的MicrosoftMSVC编译器开发通用C++库之后,我们现在将其移植到Linux/MacOSX(为我们祈祷)。我已经习惯并且非常喜欢MSVC中简单的内存泄漏检测机制:#ifdefDEBUG#define_CRTDBG_MAP_ALLOC#defineNEWnew(_NORMAL_BLOCK,__FILE__,__LINE__)#include#include#else#defineNEWnew#endif每个内存分配都是使用这个NEW宏完成的。每当使用我们库的进程终止时,控制台上都会报告任何内存泄漏(尚未解除分配的block)以及最初分配内存的文

c++ - C++ 中重载的 lambda 以及 clang 和 gcc 之间的区别

我正在玩一个在C++中重载lambda的技巧。具体来说://Forstd::function#include//Forstd::string#include//Forstd::cout#includetemplatestructoverload:F...{overload(F...f):F(f)...{}};templateautomake_overload(F...f){returnoverload(f...);}intmain(){std::functionf=[](intx,inty){returnx+y;};std::functiong=[](doublex,doubley){

c++ - 英特尔 C++ 编译器和 GCC 的基准

我有一个运行CentOS5的AMDOpteron服务器。我想要一个编译器,用于一个相当大的基于C++Boost的程序。我应该选择哪个编译器? 最佳答案 有一个有趣的PDFhere它比较了许多编译器。 关于c++-英特尔C++编译器和GCC的基准,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1733627/

c++ - GCC中的lambda函数有多快

玩弄了一下C++0xLambdaExpression在G++中,我想知道与不使用lambda函数的替代方法相比,一般/特定情况下的性能有多好。有人知道关于lambda表达式性能的或多或少全面的讨论,或者在开发过程中更舒适的情况下应该避免它们的情况吗? 最佳答案 如果您考虑将使用operator()定义结构的老式方法作为替代方法,那么不会有任何区别,因为lambdas几乎等同于此。只是在语法上更方便。让我们等待更完整的答案... 关于c++-GCC中的lambda函数有多快,我们在Stac

c++ - 强制 GCC 执行 memcpy 运行时大小检查的循环取消切换?

是否有任何可靠的方法可以强制GCC(或任何编译器)在memcpy()中排除运行时大小检查在循环之外(该大小不是编译时常量,而是该循环内的常量),为每个相关的大小范围专门循环,而不是反复检查其中的大小?这是一个从性能回归报告中简化的测试用例here用于对大型数据集进行高效内存分析的开源库。(回归恰好是因为我的一个提交......)原始代码在Cython中,但我已将其简化为纯C代理,如下所示:voidtake(double*out,double*in,intstride_out_0,intstride_out_1,intstride_in_0,intstride_in_1,int*inde

c++ - 为什么 GCC 只是通过将其置于循环中而被欺骗以允许未定义的行为?

以下内容是荒谬的,但使用g++-Wall-Wextra-Werror-Winit-self可以干净地编译(我测试了GCC4.7.2和4.9.0):#include#includeintmain(){for(intii=0;ii标记为!!的行会导致未定义的行为,但GCC不会对其进行诊断。但是,注释掉for行会使GCC提示:error:‘str’isuseduninitializedinthisfunction[-Werror=uninitialized]我想知道:为什么GCC在这里如此容易被愚弄?当代码不在循环中时,GCC知道它是错误的。但是将相同的代码放在一个简单的循环中,GCC就不再

c++ - GCC 中地址清理程序的有意义的堆栈跟踪

我刚刚尝试使用GCC和-fsanitize=address标志进行编译。当我运行我的程序时,地址清理程序发现了一个缺陷,但堆栈跟踪没有帮助。如何配置它以使其指向我需要查看的源代码位置?===================================================================32415==ERROR:AddressSanitizer:heap-buffer-overflowonaddress0x6006004b38a0atpc0x10b136d5cbp0x7fff54b8e5d0sp0x7fff54b8e5c8WRITEofsize8at0x6

c++ - How to get around GCC ‘*((void*)& b +4)’ may be used uninitialized in this function warning while using boost::optional

我有类似下面的代码:#include::boost::optionalgetitem();intgo(intnr){boost::optionala=getitem();boost::optionalb;if(nr>0)b=nr;if(a!=b)return1;return0;}当使用GCC4.7.2和Boost1.53进行编译时,使用以下命令:g++-c-O2-Wall-DNDEBUG发出以下警告:13:3:warning:‘((void)&b+4)’maybeuseduninitializedinthisfunction[-Wmaybe-uninitialized]显然,根本问题在

c++ - OS X Yosemite 中的 gcc 4.9.1 - gcc : warning: couldn’t understand kern. osversion ‘14.0.0'

我安装了OSXYosemite,现在我遇到了gcc4.9.1编译器的大问题。我希望有人可以帮助我。我尝试编译我的程序并收到警告消息:gcc:warning:couldn’tunderstandkern.osversion‘14.0.0'我在谷歌上搜索并找到https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61407我尝试应用补丁做:sudopatch-p1在gcc文件夹中:/usr/local/bin/gcc我收到了消息:can'tfindfiletopatchatinputline5Perhapsyouusedthewrong-por--str

c++ - 如何在编译时测试当前版本的 GCC?

我想根据GCC的版本包含不同的文件。更确切地说,我想写:#ifGCC_VERSION>=4.2#include#defineEXTstd#elifGCC_VERSION>=4#include#defineEXTstd#else#include#defineunordered_map__gnu_cxx::hash_map#defineEXT__gnu_cxx#endif3.2之前的gcc我不关心。我很确定在预处理时为此定义了一个变量,但我再也找不到它了。 最佳答案 应根据您的需要定义许多宏:__GNUC__//major__GNUC_