gpt4 book ai didi

c - 编程语言和方法是否效率低下? (需要汇编程序和 C 知识)

转载 作者:太空狗 更新时间:2023-10-29 16:45:58 27 4
gpt4 key购买 nike

很长一段时间以来,我都在思考和研究C语言编译器以汇编形式的输出,以及CPU架构。我知道这对你来说可能很愚蠢,但在我看来有些东西是非常无效的。如果我错了,请不要生气,我不明白所有这些原则是有原因的。如果你告诉我为什么这样设计,我会很高兴。我真的相信我错了,我知道把 PC 放在一起的人的天才头脑知道这样做的理由。究竟是什么,你问?我马上告诉你,我以 C 为例:

1:栈局部作用域内存分配:

因此,典型的本地内存分配使用堆栈。只需将 esp 复制到 ebp,然后通过 ebp 分配所有内存。好的,如果您明确需要按默认堆栈值分配 RAM,我会理解这一点,但如果我理解正确,现代操作系统使用分页作为应用程序和物理 RAM 之间的转换层,当您想要的地址在到达实际 RAM 之前进一步转换时字节。那么为什么不直接说 0x00000000 是 int a,0x00000004 是 int b 等等呢?并通过 mov 0x00000000,#10 访问它们?因为您实际上不会访问内存块 0x00000000 和 0x00000004,但是您的操作系统将分页表设置为这些内存块。实际上,由于 ebp 和 esp 的内存分配使用间接寻址,“我的”方式会更快。

2:变量分配口是心非:

当您运行应用程序时,Loader 将其代码加载到 RAM 中。当您创建变量或字符串时,编译器会生成代码,这些代码在 main 中创建时将这些值推送到栈顶。所以有这样做的实际指令,以及内存中的实际数字。因此,RAM 中有 2 个相同值的条目。一种是指令形式,第二种是 RAM 中的实际字节形式。但为什么?为什么不只是在声明变量 count 时将在哪个内存块,而不是在使用时插入这个内存位置?

最佳答案

您将如何实现递归函数?你所描述的相当于到处使用全局变量。

这只是一个问题。您如何链接到预编译的目标文件并确保它不会破坏您的过程的内存?

关于c - 编程语言和方法是否效率低下? (需要汇编程序和 C 知识),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com