草庐IT

c++ - 为什么 gcc 生成一个 memmove 而不是 memcpy 来复制 std::vector<>?

在gcc5.3中,以下示例中的两个函数都会生成对memmove的调用。生成memcpy会不会不合适?#includeintblackhole(conststd::vector&);intcopy_vec1(conststd::vector&v1){conststd::vectorv2{v1.begin(),v1.end()};returnblackhole(v2);}intcopy_vec2(conststd::vector&v1){constautov2=v1;returnblackhole(v2);}Exampleongodbolt. 最佳答案

c++ - gcc -O2 的奇怪整数行为

#include#includevoidsanity_check(intx){if(x当我用gccwtf.c编译上面的程序时,我得到了预期的输出:42!=-2147483648positivenumber:4297!=-2147483648positivenumber:97-2147483648==-2147483648negativenumber:-2147483648但是,当我用gcc-O2wtf.c编译程序时,我得到了不同的输出:42!=-2147483648positivenumber:4297!=-2147483648positivenumber:97-2147483648!

c++ - 通过分析汇编列表验证 gcc/g++ 中的编译器优化

我刚刚问了一个与编译器如何优化某些C++code有关的问题,我正在四处寻找关于如何验证编译器是否执行了某些优化的任何问题。我试图查看使用g++(g++-c-g-O2-Wa,-ahl=file.sfile.c)生成的程序集列表,以了解幕后发生的事情,但输出对我来说太神秘了。人们使用什么技术来解决这个问题,是否有关于如何解释优化代码的汇编列表或特定于GCC工具链的文章的任何很好的引用来讨论这个问题? 最佳答案 GCC的优化过程以一种名为GIMPLE的格式处理代码的中间表示。.使用-fdump-*familyofoptions,你可以要求

c++ - Gcc:强制编译器默认使用 unsigned char

由于当unsigned限定符不存在时,C++中char的性质是编译器相关的,是否有一个参数我可以传递给GCC强制将所有char编译为unsigned? 最佳答案 您正在寻找的标志是-funsigned-char。来自thedocumentation:-funsigned-charLetthetypecharbeunsigned,likeunsignedchar.Eachkindofmachinehasadefaultforwhatcharshouldbe.Itiseitherlikeunsignedcharbydefaultorli

c++ - Visual C++ 和 gcc 一样强大吗?

我对强大的定义是定制能力。我熟悉gcc我想试试MSVC。所以,我在msvc中搜索gcc等效选项。我找不到很多。控制输出类型Stopafterthepreprocessingstage;donotrunthecompilerproper.gcc:-Emsvc:???Stopafterthestageofcompilationproper;donotassemble.gcc:-Smsvc:???Compileorassemblethesourcefiles,butdonotlink.gcc:-cmsvc:/c对调试很有用Print(onstandarderroroutput)thecomm

c++ - GCC:程序不适用于编译选项 -O3

我正在编写一个C++程序,当我使用优化(选项-O1、-O2、-O3等)编译它时,它无法运行(出现段错误),但当我在没有优化的情况下编译它。有没有可能是我的代码有错误?还是我应该假设这是GCC中的错误?我的GCC版本是3.4.6。是否有任何已知的解决此类问题的方法?我的程序的优化版本和未优化版本在速度上存在很大差异,因此我确实需要使用优化。这是我原来的仿函数。一个在没有优化级别的情况下工作正常并且在任何优化级别都抛出段错误的:structdistanceToPointSort{indexedDocument*point;distanceToPointSort(indexedDocumen

c++ - GCC 编译 C/C++ 的最强化选项集是什么?

哪一组GCC选项可以提供最好的保护来防止内存损坏漏洞,例如缓冲区溢出和悬挂指针?GCC是否提供任何类型的ROP链缓解措施?是否存在性能问题或其他问题会阻止此GCC选项用于生产中的关键任务应用程序?我正在查看DebianHardeningGuide以及GCCMudflap.以下是我正在考虑的以下配置:-D_FORTIFY_SOURCE=2-fstack-protector--paramssp-buffer-size=4-fPIE-pie-Wl,-z,relro,-z,now(ld-zrelroandld-znow)是否可以对这组选项进行任何改进?假设是最新版本的GCC,如果您知道即将推出

c++ - GCC 对 lambda 中的静态变量做了什么?

使用GCC6.1,以下程序:#include#include#include#include#includeintmain(){staticconststd::stringfoo{"foo"};std::vectorbars{{""}};std::cout打印:foooutside:foofooinside:LiveOnColiru这是怎么回事? 最佳答案 此错误已归档为错误69078,但尚未确认。参见:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69078

c++ - MSVC 等同于 GCC 的 -fno-finite-math-only?

在GCC上,我们启用-ffast-math来加速浮点计算。但是由于我们依赖于NaN和Inf浮点值的正确行为,我们还打开了-fno-finite-math-only,以便假设值不是NaN/Inf的优化对于MSVC,-ffast-math的“等价物”显然是/fp:fast。但是,与GCC的-ffast-math一样,它alsoincludes假设Nan/Inf不存在的优化。(至关重要的是,不能保证像std::isnan()这样的测试会给出“准确”的结果。)是否有一个MSVCC++编译选项允许您利用大部分/fp:fast优化,但仍“正确”处理NaN和Inf值?(或者至少,保证像std::is

c++ - 在具有虚拟继承的初始化列表中使用lambda捕获的gcc错误?

以下代码在gcc-4.9、5.4和6.3下使用std=c++11时会出现段错误,但在clang-3.7和VS2015Update3下编译和运行良好。structA{intFunc(){returnx++;}intx=5;};structB{B(int){}};structDerived:publicvirtualA,publicB{Derived():A()//,B(this->Func())//Thisworks!,B([this](){returnthis->Func();}())//Butthissegfaults.{}};intmain(){Derivedc;}这是gcc中的错