- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始学习汇编,所以我使用命令 gcc -S file.c
获取我的 C 代码的汇编版本。
一切工作正常,但我注意到当我输入一个简单的代码时,例如:
void ft_return_strlen(char *str)
{
int a;
a = strlen(str);
return (a);
}
gcc -S file.c
命令给了我这个:
_ft_return_strlen:
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset %rbp, -16
movq %rsp, %rbp
.cfi_def_cfa_register %rbp
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rdi
callq _ft_strlen
movl %eax, -12(%rbp)
movl -12(%rbp), %eax
addq $16, %rsp
popq %rbp
retq
即使这个函数没有用,为什么 gcc 给我这些行?
movq %rdi, -8(%rbp)
movq -8(%rbp), %rdi
它们不是没用吗?如果这些行真的没用,它们是来 self 的代码还是来自 gcc?有没有办法改善这个问题?
最佳答案
未优化时,编译器为变量 str 分配空间,即 -8(%rbp)
。顶部的所有代码都是在寄存器 rbp 和 rsp 之间的堆栈上为局部变量留出一个空间。
函数调用将其放入寄存器 rdi 中,但调试器需要在名为 str 的变量中查看它。如果在调试器中您要更改变量 str,则需要将该新值作为 strlen 的参数复制回来。
同样的情况也发生在变量 a,-12(%rbp)
上,它必须从返回寄存器 rax 复制,然后复制回来以返回,以防万一您对其进行编辑在调试器中。
通过优化,变量将被完全丢弃,但调试器知道等效项位于寄存器中。在最大程度的优化下,整个函数可以被删除,或者用 jmp to strlen 替换,但是这样你就根本无法调试它了!
关于c - 这些无用的 assembly 线从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60119921/
哇,我一直在尝试让一个简单的 Android Twitter 应用程序运行,但这是不可能的。我来自 iOS 背景。我目前正在努力使这些工作: 来自 Marakana 的 MyTwitter 应用程序。
我只花了几个小时调试一个编译器错误,如果编译器的错误消息更有用,我可以立即修复这个错误。 我把它简化为一个简单的例子: template int f(int); template auto g(U
我想调整我的线条(两条)的大小,因为我觉得它们太瘦了。 下面的代码这样做了,但是为 size 创建了一个图例,这是无用的,因为 size 没有可以映射到它的变量。 qplot(date,value,d
如果我这样做 xset dpms 600 3600 7200 ,它在 10 点后使我的屏幕空白 几分钟的不事件。 问题 X11 怎么知道我闲了多久,我怎么才能访问这个 以编程方式空闲时间? 我无法获得
在调查 ConflictError ( see this previous question ) 时,我看到了很多 persistent.mapping.PersistentMapping 冲突。 具
我正在使用 PHP 和 jQuery 创建交互式白板应用程序。创建一个卡片组不是问题,也不是在页面上应用 Canvas 覆盖以便我可以在上面写字。我是一名业余编码员,完全是自学成才。这部分是学习更多的
我是网页设计的自学者,所以我可能会错过一些基础编码。 所以问题是 内容在一行中从右边溢出了 div。 代码如下 HTML
我在将 DRF SessionAuthentication 与定义为 ModelViewSets 的 View 一起使用时遇到问题。 “LoginRequiredMixin”在泛型 View 中工作正
这是我的一段代码:输出看起来像:12、44、55,我需要删除最后一个“,”,我尝试了所有方法。 while ((r = scanf("%d", &v)) > 0){ printf("%
我正在做这样的事情 http://jsfiddle.net/8ErSL/2/ 当您将鼠标悬停在任何文本框 (div) 上时,其中会出现一个小图标。 我想阻止图标的淡入淡出效果在我不小心将鼠标悬停在 d
我使用“wget --mirror [sitename]”启动了一个 wget 镜像,它是工作正常,但意外中断了该过程。 我现在想恢复镜像,但有以下警告: 如果 wget 已经下载了一个文件,我不想下
我有一个包含多个子项的 DOM 元素 (#installations),其中只有一个具有类 .selected。我需要选择此类和其余的前 3 个 (:not(.selected)) 并显示它们 - 目
我是一名优秀的程序员,十分优秀!