Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么是叮当声';s汇编程序输出有条件跳转到无条件跳转?_C_Macos_Clang_Code Generation_Compiler Optimization - Fatal编程技术网

C 为什么是叮当声';s汇编程序输出有条件跳转到无条件跳转?

C 为什么是叮当声';s汇编程序输出有条件跳转到无条件跳转?,c,macos,clang,code-generation,compiler-optimization,C,Macos,Clang,Code Generation,Compiler Optimization,在调试一个程序在被取消引用的损坏指针上崩溃的问题时,我运行了lldb,并对崩溃函数进行了反汇编。在仔细阅读反汇编代码时,我注意到这种奇怪的指令选择: -O0用于 减少编译时间,并使调试产生预期效果 结果。这是默认设置 与相应的源代码进行比较可能会很有趣。您的代码是在调试模式下编译的吗?如果是这样,这就可以解释为什么汇编代码是这样写的。它是用-O0-g3编译的。它产生了一个跳转到一个跳转,这似乎有点奇怪,但这可能可以解释它。既然你也添加了标记C:产生这段代码的源代码行是什么?@RadLexus我添

在调试一个程序在被取消引用的损坏指针上崩溃的问题时,我运行了
lldb
,并对崩溃函数进行了反汇编。在仔细阅读反汇编代码时,我注意到这种奇怪的指令选择:


-O0
用于

减少编译时间,并使调试产生预期效果 结果。这是默认设置


与相应的源代码进行比较可能会很有趣。

您的代码是在调试模式下编译的吗?如果是这样,这就可以解释为什么汇编代码是这样写的。它是用
-O0-g3
编译的。它产生了一个跳转到一个跳转,这似乎有点奇怪,但这可能可以解释它。既然你也添加了标记C:产生这段代码的源代码行是什么?@RadLexus我添加了原始代码,添加了一点额外的上下文,如果有兴趣,还添加了一个指向Github上原始C文件的链接。
0x100002b06 <+86>:   cmpl   $0x0, %eax
0x100002b09 <+89>:   je     0x100002b14
0x100002b0f <+95>:   jmp    0x10000330e
0x100002b14 <+100>:  jmp    0x100002c1d
0x100002b06 <+86>:   cmpl   $0x0, %eax
0x100002b09 <+89>:   je     0x100002c1d
0x100002b0f <+95>:   jmp    0x10000330e
traverse = travdone_head;
while (1) {
  if (traverse == NULL) nullptr("grokdir() traverse");
  /* Don't re-traverse directories we've already seen */
  if (inode == traverse->inode && device == traverse->device) {