当前位置: 首页 > 知识库问答 >
问题:

为什么GCC首先将整数加载到eax,然后再加载到其他一些相关寄存器?

滑令
2023-03-14

使用这个网站,我为一个简单的程序生成了汇编代码。

main:
        push    rbp
        mov     rbp, rsp
        sub     rsp, 16
        mov     DWORD PTR [rbp-4], 5
        mov     eax, DWORD PTR [rbp-4]
        mov     edi, eax
        mov     eax, 0
        call    ifunc
        mov     eax, 0
        leave
        ret

在这里,a的值从内存加载到eax中,然后将其移动到edi以传递给函数。但是我写了一个类似的汇编代码,并直接将a的值加载到edi中。两者工作正常。GCC是否遵循此目的进行某种优化?首先加载eax有什么好处?

共有1个答案

严扬
2023-03-14

GCC是否遵循这一点进行某种优化?

恰恰相反。您在没有优化的情况下进行编译,因此gcc不会进行优化,从而删除冗余的movs和不必要的a作为堆栈内存中的变量分配。

首先加载eax有什么好处?

它没有,只是多余的。未优化的编译器代码包含这样看起来很愚蠢的东西是很常见的。

 类似资料:
  • 问题内容: 我想知道如何将字节数组加载到 内存 URLClassLoader中?字节数组是jar文件的解密字节(如下所示)! 大多数内存类加载器都使用ClassLoader而不是URLClassLoader!我需要它使用URLClassLoader。 谢谢! 问题答案: 我将在这里发布我过去做过的实现: 我的自定义ClassLoader:

  • 问题内容: 当网站输出到客户端时,我正在尝试优化网站的大小。缓存时,我分别只有1.9MB和29KB。问题在于,第一次加载包含的图像对于移动设备而言并未经过优化。它具有1080p分辨率。 因此,我正在寻找一种方法,该方法允许我首先加载低分辨率版本(),一旦网站加载完毕,请使用高分辨率版本- 甚至分辨率接近所用设备的分辨率版本(或只是) 。 就像每个人都期望的那样,使用CSS设置背景。它应用于主体,整

  • 本文向大家介绍js怎么控制一次加载一张图片,加载完后再加载下一张相关面试题,主要包含被问及js怎么控制一次加载一张图片,加载完后再加载下一张时的应答技巧和注意事项,需要的朋友参考一下 参考回答: (1)方法1 alert('图片的宽度为:'+obj.width+';图片的高度为:'+obj.height); (2)方法2    

  • 问题内容: 我需要做的事情很简单,但是(对我来说)很难做到: 使用 javascript ,给定图像名称,即“ image01.jpg”,我需要检查该图像是否存在于某个文件夹或路径(本地或网络)中。如果该文件夹下不存在该图像,则需要检查另一个文件夹中是否存在同一图像。 例如,使用伪代码 您建议采用哪种方法?我尝试先使用ajax来实现此目的,然后使用javascript的Image()来实现,但是在

  • 在我的模型中,我有一个聚合根,每个根都有一个关联的的集合。每个都有一个反向导航属性。 我需要一次获取所有的,这导致在我的中出现以下查询 是来自EF上下文的。 问题是懒惰加载没有实现(我也不想实现它),查询后的属性是。所有的东西都正确地通过EF映射。 要检索具有非空的所有的查询应该是什么? 我用的是EF6。

  • 我正在尝试将一个字符串从topicRNG加载到changeXML。我以前在类之间加载过变量,但现在无法运行 首先,我有我的代码,我试图加载它。包装试验; 然后是我试图加载的代码, 当我从GenreDefiner加载int时,我把它设置成这样, 我尝试过“将公共静态字符串放入topicFinal”,但它给了我一个错误,当我将它放在“公共静态void main(String args[]){}”之外时