草庐IT

optimization - gcc 内存对齐编译指示

gcc是否有内存对齐编译指示,类似于英特尔编译器中的#pragmavectoraligned?我想告诉编译器使用对齐的加载/存储指令优化特定循环。为避免可能的混淆,这与结构打包无关。例如:#ifdefined(__INTEL_COMPILER)#pragmavectoraligned#endiffor(inta=0;a谢谢 最佳答案 你可以告诉GCC一个指针指向对齐的内存,方法是使用typedef创建一个你可以声明指针的过度对齐类型。这对gcc有帮助,但对clang7.0或ICC19没有帮助,请参阅它们发出的x86-64非AVXas

c - GCC:为什么常量变量没有放在 .rodata 中

我一直相信GCC会将staticconst变量放置到.rodata段(或放置到.text段以进行优化)的ELF或此类文件。但好像不是这样的。我目前在装有GNU/Linux的笔记本电脑上使用gcc(GCC)4.7.020120505(prerelease)。它确实在.bss段中放置了一个静态常量变量:/**thisisa.c,andinitsgeneratedasmfilea.s,thefollowinglinegives:*.comma,4,4*whichwouldplacevariableain.bssbutnot.rodata(or.text)*/staticconstinta;i

c - GCC:为什么常量变量没有放在 .rodata 中

我一直相信GCC会将staticconst变量放置到.rodata段(或放置到.text段以进行优化)的ELF或此类文件。但好像不是这样的。我目前在装有GNU/Linux的笔记本电脑上使用gcc(GCC)4.7.020120505(prerelease)。它确实在.bss段中放置了一个静态常量变量:/**thisisa.c,andinitsgeneratedasmfilea.s,thefollowinglinegives:*.comma,4,4*whichwouldplacevariableain.bssbutnot.rodata(or.text)*/staticconstinta;i

c++ - gcc -O4 优化标志

gcc(3.2.3)中的-O4优化标志是什么意思?和O3有什么区别?您什么时候使用一个与另一个?手册页只提到了O、O0-3、Os,没有提到神秘的O4。谢谢! 最佳答案 3.2.3中没有-O4。高于-O3的所有内容都会导致选择-O3。 关于c++-gcc-O4优化标志,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3399821/

c++ - gcc -O4 优化标志

gcc(3.2.3)中的-O4优化标志是什么意思?和O3有什么区别?您什么时候使用一个与另一个?手册页只提到了O、O0-3、Os,没有提到神秘的O4。谢谢! 最佳答案 3.2.3中没有-O4。高于-O3的所有内容都会导致选择-O3。 关于c++-gcc-O4优化标志,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3399821/

c++ - 用于隐式转换的 gcc 警告标志

我最近遇到了一个与下一个类似的错误:doublegetSomeValue(){return4.0;}...std::stringstr;str=getSomeValue();正如您在此处看到的,很容易发现问题,但在getSomeValue()与调用代码不在同一个文件中的大型代码库中,可能很难发现此问题double到std::string静默转换。GCC可以使用-Wall-Wextra-Werror很好地编译此代码(此处的示例输出,我不知道使用了哪些警告标志:http://ideone.com/BTXBFk)。如何强制GCC对这些危险的隐式转换发出警告?我尝试了-Wconversion,

c++ - 用于隐式转换的 gcc 警告标志

我最近遇到了一个与下一个类似的错误:doublegetSomeValue(){return4.0;}...std::stringstr;str=getSomeValue();正如您在此处看到的,很容易发现问题,但在getSomeValue()与调用代码不在同一个文件中的大型代码库中,可能很难发现此问题double到std::string静默转换。GCC可以使用-Wall-Wextra-Werror很好地编译此代码(此处的示例输出,我不知道使用了哪些警告标志:http://ideone.com/BTXBFk)。如何强制GCC对这些危险的隐式转换发出警告?我尝试了-Wconversion,

c++ - constexpr 构造函数在 GCC 在编译时评估时给出不同的结果

构造函数在重复修改数据成员时使用一个引用并按值返回的函数:constexprintvv(intx){returnx;}constexprint&rr(int&x){returnx;}constexprintrv(int&x){returnx;}constexprstructS{intx{0};templateconstexprS(Ff){x=f(x)+1;x=f(x)+1;}}s(rv);//s.xis1iffunctionrvisused,2otherwise.static_assert(s.x==2,"");只有函数rv在构造函数中使用时会产生意外结果。如果vv或rr被传递,那么s

c++ - constexpr 构造函数在 GCC 在编译时评估时给出不同的结果

构造函数在重复修改数据成员时使用一个引用并按值返回的函数:constexprintvv(intx){returnx;}constexprint&rr(int&x){returnx;}constexprintrv(int&x){returnx;}constexprstructS{intx{0};templateconstexprS(Ff){x=f(x)+1;x=f(x)+1;}}s(rv);//s.xis1iffunctionrvisused,2otherwise.static_assert(s.x==2,"");只有函数rv在构造函数中使用时会产生意外结果。如果vv或rr被传递,那么s

c++ - 为什么 GCC 不能消除多个继承函数的歧义(但 clang 可以)?

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Whydomultiple-inheritedfunctionswithsamenamebutdifferentsignaturesnotgettreatedasoverloadedfunctions?使用g++4.6.1无法在指定位置编译:enumEa{Ea0};enumEb{Eb0};structSa{voidoperator()(Ea){}};structSb{voidoperator()(Eb){}};structSbroken:Sa,Sb{};structSworks{voidoperator()(