optimization相关内容

如何在不指定 -O1 的情况下获得 gcc -O1 优化

我知道 -O1 会自动打开某些标志.这些标志可以手动打开.如果我不指定 -O1,应该仍然可以通过指定 -O1 打开的所有标志来获得 -O1 优化. 我试过了 -fthread-jumps -fcprop-registers -fguess-branch-probability 但它仍然不做 -O1 优化.我可以知道我何时使用 gprof,因为性能不太好. 我应该打开哪些标志来获得 ..
发布时间:2022-01-17 08:37:03 其他开发

C++ 编译器可以优化“if"吗?“for"中的语句循环?

考虑一个这样的例子: if(标志)对于(条件)做一点事();别的对于(条件)do_something_else(); 如果 flag 在 for 循环内没有改变,这在语义上应该等同于: for(条件)如果(标志)做一点事();别的do_something_else(); 仅在第一种情况下,代码可能会更长(例如,如果使用了多个 for 循环,或者如果 do_something() 是一个几乎 ..
发布时间:2022-01-17 08:34:45 C/C++开发

C# 编译器或 JIT 在什么级别优化应用程序代码?

我想知道这些信息以减少我的代码大小,这样我就不会浪费我的时间来优化将由编译器或 JIT 完成的事情. 例如: 如果我们假设编译器将调用内联到属性的 get 函数,那么我不必将返回值保存在局部变量中以避免函数调用. 我想推荐一个很好的参考来描述正在发生的事情? 解决方案 你可能想看看这些文章: JIT 优化 - (Sasha Goldshtein - CodeProj ..
发布时间:2022-01-17 08:33:43 C#/.NET

编译器优化:Java 字节码

我目前正在编写一个针对 Java 字节码翻译的玩具编译器. 我想知道在编写 .class 文件之前是否可以在发出的字节码中进行各种简单的窥视孔优化的某种目录(可能是摘要).我实际上知道一些具有此功能的库,但我想自己实现它. 解决方案 你知道Proguard吗?http://proguard.sourceforge.net/ 这是一个很棒的字节码优化器,它实现了很多优化.有关列表 ..
发布时间:2022-01-17 08:32:59 Java开发

“无法评估表达式,因为当前方法的代码已优化."是什么意思?意思是?

我编写了一些包含大量递归的代码,这需要相当长的时间才能完成.每当我“暂停"运行以查看发生了什么时,我都会得到: 无法计算表达式,因为当前方法的代码已经过优化. 我想我明白这意味着什么.然而,令我困惑的是,在我点击 step 之后,代码不再“优化",我可以查看我的变量.这是怎么发生的?代码如何在优化代码和非优化代码之间来回翻转? 解决方案 Debugger使用FuncEval让你 ..
发布时间:2022-01-17 08:32:35 C#/.NET

有什么方法可以禁用特定代码行的编译器优化?

有什么方法可以禁用 Visual Studio 中特定代码行的编译器优化? 解决方案 没有. 仅在逐个函数的基础上使用 优化编译指示: #pragma optimize("[优化列表]", {on | off} ) optimize pragma 必须出现在函数之外并在之后定义的第一个函数看到 pragma.开和关arguments 中指定的选项打开或关闭优化列表. 用法 ..
发布时间:2022-01-17 08:31:06 C/C++开发

Clang vs GCC - 产生更快的二进制文件?

我目前正在使用 GCC,但我最近发现了 Clang,我正在考虑切换.但是,有一个决定因素 - 它生成的二进制文件的质量(速度、内存占用、可靠性) - 如果 gcc -O3 可以生成运行速度快 1% 的二进制文件,或者 Clang 二进制文件占用更多内存或只是由于编译器错误而失败,这是一个交易破坏者. 与 GCC 相比,Clang 拥有更好的编译速度和更低的编译时内存占用,但我对生成的已编译软 ..

是否可以保证不会在 C++ 中优化执行内存写入的代码?

允许 C++ 编译器优化写入内存: {//所有这些代码都可以去掉字符缓冲区[大小];std::fill_n(缓冲区,大小,0);} 在处理敏感数据时,典型的方法是使用 volatile* 指针来确保编译器发出内存写入.下面是 Visual C++ 运行时库 (WinNT.h) 中的 SecureZeroMemory() 函数的实现方式: FORCEINLINE PVOID RtlSecur ..

为什么通过引用传递结构不是一种常见的优化?

直到今天,我一直认为体面的编译器会自动将 struct pass-by-value 转换为 pass-by-reference,如果结构足够大,后者会更快.据我所知,这似乎是一个不费吹灰之力的优化.然而,为了满足我对这是否真的发生的好奇心,我在 C++ 和 D 并查看了 GCC 和 Digital Mars D 的输出.两者都坚持按值传递 32 字节结构,而所有有问题的函数只是将成员相加并返回值, ..

gcc 的 -static 选项?

我想知道 gcc 上的 -static 选项有什么作用.我在编译某个应用程序时需要这个选项,但是当我这样做时,我收到以下错误: gcc -static -O3 -o prog prog.c/usr/bin/ld: 找不到 -lccollect2: ld 返回 1 个退出状态 需要安装什么? GCC 版本: [user@localhost 目录]$ gcc -v使用内置规范.COLLEC ..
发布时间:2022-01-17 08:15:58 其他开发

GCC:march 与 mtune 有何不同?

我试图为此清理 GCC 手册页,但仍然不明白,真的. -march 和 -mtune 有什么区别? 什么时候只使用-march,而不是同时使用?是否有可能只 -mtune? 解决方案 如果你使用 -march 那么 GCC 将可以自由生成在指定 CPU 上工作的指令,但(通常)不在架构系列中较早的 CPU. 如果您只使用 -mtune,那么编译器将生成适用于其中任何一个的 ..
发布时间:2022-01-17 08:14:33 其他开发

常量 C 表达式是在编译时还是在运行时计算的?

如果我编写一个使用其他预处理器常量执行操作的 #define,那么每次宏在运行时出现时都会计算最终值吗?这取决于编译器中的优化,还是包含在标准中? 例子: #define EXTERNAL_CLOCK_FREQUENCY 32768#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY#define TIMER_100_MS TIMERB_1_S/10 每次 ..

编译器何时内联 C++ 代码?

在 C++ 中,是否仅在显式声明 inline(或在头文件中定义)时才内联方法,还是允许编译器在他们认为合适的情况下内联方法? 解决方案 是的,编译器可以内联代码,即使它没有显式声明为 inline. 基本上,只要不改变语义,编译器几乎可以对生成的代码做任何想做的事情.该标准不会对生成的代码强制执行任何特殊操作. ..
发布时间:2022-01-17 08:05:05 C/C++开发

GCC 优化级别有多少?

有多少个 GCC 优化级别? 我尝试了 gcc -O1、gcc -O2、gcc -O3 和 gcc -O4 如果我使用一个非常大的数字,它将不起作用. 不过,我试过了 gcc -O100 它编译了. 有多少优化级别? 解决方案 为了迂腐,有 8 种不同的有效 -O 选项可以提供给 gcc,尽管有些意思相同. 这个答案的原始版本说有 7 个选项.GCC 此后 ..
发布时间:2022-01-17 00:06:55 其他开发

什么是 Haskell 的 Stream Fusion

什么是 Haskell 的 Stream Fusion 以及如何使用它? 解决方案 Logan 指的那篇论文很棒,但是有点难.(只要问我的学生.)关于“流融合如何工作"的内容也很多,而“流融合是什么以及如何使用它"只有一小部分. 流融合解决的问题是编写的功能代码通常会分配中间列表,例如,要创建一个无限的节点编号列表,您可能会这样写 nodenames = map ("n"++) $ ..
发布时间:2022-01-17 00:01:59 其他开发

允许编译器消除无限循环吗?

优化编译器可以删除无限循环,不会改变任何数据,比如 while(1)/* noop */; 通过分析数据流图编译器可以得出,这样的循环是“死代码",没有任何副作用. C90/C99 标准是否禁止删除无限循环? C90 或 C99 标准是否允许编译器删除此类循环? 更新:“Microsoft C 版本 6.0 基本上做了这种优化.",参见 caf 的链接. 标签:转到标签;返 ..

SQL 查询 - 性能优化

我不太擅长 SQL,所以在编写查询时请大家帮忙. SQL 查询 - 表连接问题 我得到了答案,它有效!它只是明显缓慢.我讨厌这样做,但我真的希望有人想推荐一些优化查询的方法.我什至没有自己尝试过,因为我对 SQL 的了解不够,甚至无法开始使用谷歌搜索. 解决方案 在要加入的列上创建索引可能会有所帮助.例如; CREATE INDEX name_for_index ON Main (S ..
发布时间:2022-01-16 23:31:07 其他开发