草庐IT

c++ - 在特定变量上禁用 GCC "may be used uninitialized"

我在堆栈变量上收到此警告:warning:object.membermaybeuseduninitializedinthisfunction在这种情况下,我不希望强制初始化只是为了消除警告,因为它会消耗CPU周期。该变量是一个POD结构,因此其上的memset不是零成本。我可以验证该变量从未在未初始化的情况下使用过,所以我只想取消它的警告。一般来说,我确实想要警告,只是在这个特定场景中不针对这个特定变量。如何抑制警告?看起来编译指示诊断是正确的方法,但它们需要最新版本的GCC(4.6)在该版本已知之前没有可接受的解决方案。 最佳答案

c++ - 在特定变量上禁用 GCC "may be used uninitialized"

我在堆栈变量上收到此警告:warning:object.membermaybeuseduninitializedinthisfunction在这种情况下,我不希望强制初始化只是为了消除警告,因为它会消耗CPU周期。该变量是一个POD结构,因此其上的memset不是零成本。我可以验证该变量从未在未初始化的情况下使用过,所以我只想取消它的警告。一般来说,我确实想要警告,只是在这个特定场景中不针对这个特定变量。如何抑制警告?看起来编译指示诊断是正确的方法,但它们需要最新版本的GCC(4.6)在该版本已知之前没有可接受的解决方案。 最佳答案

c++ - GCC 内联 C++ 函数是否没有 'inline' 关键字?

在编译C++代码时,GCC是否曾尝试通过选择内联未用inline关键字标记的函数来优化速度? 最佳答案 是的。任何编译器只要认为这是一个好主意,就可以自由地内联任何函数。GCC也这样做。在-O2优化级别,当编译器认为值得做(使用启发式)并且不会增加代码。在-O3中,只要编译器认为值得这样做,它就会执行,而不管它是否会增加代码的大小。此外,在所有优化级别(即启用的优化)中,仅调用一次的静态函数都会被内联。正如下面评论中所指出的,这些-Ox实际上是包含多个更具体设置的复合设置,包括与内联相关的设置(如-finline-functions

c++ - GCC 内联 C++ 函数是否没有 'inline' 关键字?

在编译C++代码时,GCC是否曾尝试通过选择内联未用inline关键字标记的函数来优化速度? 最佳答案 是的。任何编译器只要认为这是一个好主意,就可以自由地内联任何函数。GCC也这样做。在-O2优化级别,当编译器认为值得做(使用启发式)并且不会增加代码。在-O3中,只要编译器认为值得这样做,它就会执行,而不管它是否会增加代码的大小。此外,在所有优化级别(即启用的优化)中,仅调用一次的静态函数都会被内联。正如下面评论中所指出的,这些-Ox实际上是包含多个更具体设置的复合设置,包括与内联相关的设置(如-finline-functions

c++ - 高度优化的矩阵乘法代码的 MSVC 和 GCC 之间的性能差异

我发现在MSVC(Windows上)和GCC(Linux上)中为IvyBridge系统编译的代码在性能上存在很大差异。该代码执行密集矩阵乘法。我使用GCC获得了70%的峰值失败率,而使用MSVC仅获得了50%的失败率。我想我可能已经隔离了它们如何转换以下三个内在函数的区别。__m256breg0=_mm256_loadu_ps(&b[8*i])_mm256_add_ps(_mm256_mul_ps(arge0,breg0),tmp0)GCC会这样做vmovupsymm9,YMMWORDPTR[rax-256]vmulpsymm9,ymm0,ymm9vaddpsymm8,ymm8,ymm

c++ - 高度优化的矩阵乘法代码的 MSVC 和 GCC 之间的性能差异

我发现在MSVC(Windows上)和GCC(Linux上)中为IvyBridge系统编译的代码在性能上存在很大差异。该代码执行密集矩阵乘法。我使用GCC获得了70%的峰值失败率,而使用MSVC仅获得了50%的失败率。我想我可能已经隔离了它们如何转换以下三个内在函数的区别。__m256breg0=_mm256_loadu_ps(&b[8*i])_mm256_add_ps(_mm256_mul_ps(arge0,breg0),tmp0)GCC会这样做vmovupsymm9,YMMWORDPTR[rax-256]vmulpsymm9,ymm0,ymm9vaddpsymm8,ymm8,ymm

c++ - 为什么gcc会有一个long long的警告?

-Wlong-long的原因是什么?gcc警告?来自gcc手册页:-Wlong-longWarniflonglongtypeisused.Thisisenabledbyeither-Wpedanticor-WtraditionalinISOC90andC++98modes.Toinhibitthewarningmessages,use-Wno-long-long.据我了解,longlong要求至少为64位(实际上它总是64位,至少在今天的编译器中是这样)。这不是ISOC90或C++98的情况,还是有其他不使用longlong的原因??我知道类型如int64_t和friend,但一些不太

c++ - 为什么gcc会有一个long long的警告?

-Wlong-long的原因是什么?gcc警告?来自gcc手册页:-Wlong-longWarniflonglongtypeisused.Thisisenabledbyeither-Wpedanticor-WtraditionalinISOC90andC++98modes.Toinhibitthewarningmessages,use-Wno-long-long.据我了解,longlong要求至少为64位(实际上它总是64位,至少在今天的编译器中是这样)。这不是ISOC90或C++98的情况,还是有其他不使用longlong的原因??我知道类型如int64_t和friend,但一些不太

c++ - GCC 相当于 MS/bigobj

我们正在大量使用boost::serialization和一般模板。一切似乎都很顺利。除了,我们在Windows版本中遇到了障碍。它似乎导致目标文件太大的问题。我们在g++4.7.0中使用MinGW/Msys。c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/as.exe:CMakeFiles/source.dir/sourcecode.cpp.obj:toomanysections(33396)C:\Users\username\AppData\Local\Temp\ccnAocvD.s:Assemblerme

c++ - GCC 相当于 MS/bigobj

我们正在大量使用boost::serialization和一般模板。一切似乎都很顺利。除了,我们在Windows版本中遇到了障碍。它似乎导致目标文件太大的问题。我们在g++4.7.0中使用MinGW/Msys。c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/as.exe:CMakeFiles/source.dir/sourcecode.cpp.obj:toomanysections(33396)C:\Users\username\AppData\Local\Temp\ccnAocvD.s:Assemblerme