compiler-optimization相关内容

如何在Perl中禁用常量折叠?

给出类似的命令 perl -MO = Deparse -E'use constant FOO =>42;打印FOO()' 如何禁用这样的恒定折叠 打印42; 告诉我 print FOO(); 之类的.理想情况下,我希望这是一个适用于所有Perl的编译器选项.您可以在perl邮件列表 [perl#97942] [PATCH]添加 -DO 选项以禁用优化,并禁用常量折叠和窥视孔优 ..
发布时间:2021-04-23 20:07:45 其他开发

Binutils LD创建巨大的文件

我正在尝试创建尽可能小的ELF.我创建了这样的测试文件(NASM语法): SECTION .textdd 0xdeadbeef 使用此链接描述文件: SECTIONS {.文本 : {*(.文本)}} 然后我检查了平面二进制文件和ELF的大小,构建了两种方法: nasm -f bin -o test test.asm 它是平面二进制,所以是4个字节. nasm -f e ..
发布时间:2021-04-23 20:07:33 其他开发

使用更新的CPU指令支持构建向后兼容的二进制文件

实现同一功能的多个版本的最佳方法是使用特定的CPU指令(如果在运行时进行了测试),或者如果使用慢的实现则回退到较慢的实现? 例如,x86 BMI2提供了非常有用的 PDEP 指令.我将如何编写C代码,以便在启动时测试正在执行的CPU的BMI2可用性,并使用两种实现方式之一-一种使用 _pdep_u64 调用(可用于 -mbmi2 ),另一个使用C代码“手动"进行位操作.是否有针对此类情况的内置支 ..
发布时间:2021-04-23 20:07:30 其他开发

IF语句中OR和AND运算符的中断条件

If语句和任何其他布尔比较很聪明,足以在评估 A和B以及C和D 时停止在第一个FALSE值,而在评估 A或B或第一个TRUE值时停止C或D . 此行为的名称是什么? 这是编译器优化吗?如果是这样,是否有一种方法可以通过一些编译器指令将其禁用? 解决方案 这称为“布尔短路评估",是“惰性评估"的一种形式. 您可以使用 ..

为什么GCC会产生一个跳转来跳转到一条便宜的指令上,这是有充分的理由的吗?

我正在对循环计数中的一些计数进行基准测试.g ++与-O2代码一起使用,我注意到当在50%的情况下满足某些条件时,它会出现一些性能问题.我认为这可能意味着代码会进行不必要的跳转(因为clang会生成更快的代码,所以这不是一些基本的限制). 我在这个汇编输出中发现有趣的是,代码跳过了一个简单的添加. =>0x42b46b ..
发布时间:2021-04-23 20:07:23 其他开发

@tailrec是否会影响编译器优化?

我查看了这个问题试图更好地理解scala中的 @tailrec 注释. 我不确定是注解是否还提示编译器进行了一些优化,还是仅在标记了非尾递归的方法时才用于警告? 更具体地说-此注释是否可能以任何方式影响性能?例如,如果我不添加此批注,则编译器会将尾递归函数编译为非尾递归吗? 解决方案 根据scaladoc: 方法批注,用于验证将要编译的方法带有尾部呼叫优化功能. 如 ..
发布时间:2021-04-23 20:07:20 其他开发

没有在类中使用const静态变量进行优化吗?

合理的体面的编译器能否丢弃此const静态变量 A类{const static int a = 3;} 如果编译后的二进制文件中没有使用它,或者二进制文件中仍然显示它? 解决方案 简短答案:也许可以.该标准没有说如果从未使用过编译器,则它必须保留常量(或字符串,函数,或其他任何东西). 长答案:这在很大程度上取决于具体情况.如果编译器可以清楚地确定未使用它,它将删除未使用的常 ..
发布时间:2021-04-23 20:07:17 C/C++开发

GCC将寄存器args放置在堆栈中,且其间隙小于局部变量?

我试图查看一个非常简单的程序的汇编代码. int func(int x){int z = 1337;返回z;} 使用GCC -O0,每个C变量都有一个未优化的内存地址,因此gcc溢出了其寄存器arg:(红色区域是否超出了必要?难道这不能触及本叶子函数无法触及的新缓存行吗? 解决方案 (首先,不要期望在 -O0 处做出有效的决定.事实证明,您在如果我们使用 volatile 或其他方 ..
发布时间:2021-04-23 20:07:14 其他开发

无论我使用的是printf还是puts,为什么在拆卸时都显示puts?

我对编程还很陌生,想问为什么我用不同的代码会得到相同的结果.我实际上是在读一本书,而本书中的示例是使用printf的(同样在Assembler中).在这种情况下,它说 .本书中的汇编代码与我的不同,但C代码相同.我的处理器只是在计算不同吗? (问题在通话中 ) 代码1: #includein ..
发布时间:2021-04-23 20:07:11 其他开发

为什么在C#中使用结构Vector3I而不是三个整数要慢得多?

我正在3D网格中处理大量数据,因此我想实现一个简单的迭代器,而不是三个嵌套循环.但是,我遇到了一个性能问题:首先,我仅使用int x,y和z变量实现了一个简单的循环.然后,我实现了Vector3I结构并使用它-计算时间加倍.现在,我正在为这个问题而苦苦挣扎-为什么呢?我做错了什么? 复制示例: 使用BenchmarkDotNet.Attributes;使用BenchmarkDotNet.R ..
发布时间:2021-04-23 20:07:04 C#/.NET

双问号('??')与是否在分配相同变量时

请参阅以下 SE答案. 写作时 A = A ??B; 与 相同 if(null!= A)A = A;别的A = B; 那是不是 if(null == A)A = B; 在性能方面会更受欢迎吗? 还是我可以假设当同一对象位于 ?? 表示法中时,编译器会优化代码吗? 解决方案 尽管 ?? 的性能可以忽略不计,但有时副作用却可以忽略不计.请考虑以下程序. ..
发布时间:2021-04-23 20:07:01 C#/.NET

简单循环中无法预测的行为,以检查是否行&col存在于文件中

下面是函数的代码,该函数检查为其指定的行和列“坐标"对于将指针传递给它的文件是否有效. 混乱的12小时后,我不知道为什么这样随机. 在自己的源文件上运行此命令时,它会在任何大于 10 的列值上引发错误.我假设一些过分热情的编译器优化将 q 计数变量和 chk 变量并置,并且由于'\ n'具有十进制val 10 ,打破了我的循环. 假设,我尝试使用GCC进行编译(以前我使用的是Ap ..
发布时间:2021-04-23 20:06:47 其他开发

如何使gcc编译器不优化诸如printf之类的标准库函数调用?

出于好奇,我想知道gcc是否可以通过某种方式不优化任何函数调用? 在生成的汇编代码中,将printf函数替换为putchar.即使使用默认的 -O0 最小优化标志,也会发生这种情况. #includeint main(void){printf("a");返回0;} (这就是 -O0 的真正含义);gcc没有尝试完全将C音译为asm的“完全哑"模式.为此使用 tcc ..
发布时间:2021-04-23 20:06:43 其他开发