gpt4 book ai didi

c - 汇编语言和c语言——文件大小的比较

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:50 24 4
gpt4 key购买 nike

我制作了两个 hello-world 程序 - 一个在 x86 汇编中使用 CMD 中的调试器,另一个在 c 语言中。

由于汇编语言向 CPU 提供了非常精确的指令,因此可执行文件在内存中占用的字节数少于可执行 c 文件也就不足为奇了。但令我惊讶的是,差异真的很大:输出如下:

hello world in x86 assembly: 30 bytes

hello world in c-language: 102 kb

也就是说,c 程序是汇编程序的 3400 倍。

我最初认为它可以通过在上下文 stdio.h 中包含头文件来解释,但在没有它的情况下编译时,文件大小仅减少到 95KB。

那么 - 我的问题是 - 是什么使 c 文件的字节数比汇编文件大得多?该可执行文件可能是某些 dll 文件所依赖的吗?

x86 汇编代码:

jmp 115
db 'Hello world!$'
-a 115
mov ah, 09
mov dx, 102
int 21
int 20

C 代码:

#include <stdio.h>

int main(void) {
printf("Hello world!");
}

c 程序使用 MinGW 编译,使用默认选项

最佳答案

此开销可能是由于包含编译器的默认运行时库造成的,因为您正在使用它来调用 printf()。请注意,printf() 是一个比 the DOS interrupt 功能更强大的函数。你在打电话所有这些功能当然意味着它包含更多代码。您可以尝试将 printf() 切换为 puts()

我并不是说单独的 printf() 是 102 KB,它可能远非如此,但您还可以获得整个库,它是支持代码(init/de-init,exit -handlers,等等)而不仅仅是那个函数。

关于c - 汇编语言和c语言——文件大小的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21826785/

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