gpt4 book ai didi

c - 程序集与 C 可执行文件大小

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:04 25 4
gpt4 key购买 nike

我用 C 和 x86 汇编编写了两个等效程序:

.386
.model small
INCLUDELIB MSVCRT
EXTRN _printf:NEAR
.data
msg db "Hello World", 10, 0
.code
main PROC
push ebp
mov ebp, esp
lea eax, msg
push eax
call _printf
add esp, 4
mov esp, ebp
pop ebp
ret 0
main ENDP
END

#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}

我用以下代码编译了汇编:ml hello.asm/link/ENTRY:main/SUBSYSTEM:CONSOLE

还有 C 一个:cl/O1/MD hello.c

/O1 开关应该最小化空间,/MD 开关链接 MSVCRT.LIB 而不是 LIBCMT(这在我的汇编程序中是一样的)。

但是,当我检查实际的可执行文件时,C 文件实际上是程序集文件大小的两倍:

2014-02-08  10:48 AM             3,072 hello.exe
2014-02-08 10:53 AM 6,144 hello_c.exe

对两者执行 DUMPBIN/DISASM 表明汇编程序只生成我指定的确切指令,而 C 程序生成的指令多出数百倍...

有没有人能解释为什么要求最小化空间的优化编译器仍然产生比汇编程序更差的结果?

最佳答案

我相信这是因为 C 运行时添加了额外的样板代码。它必须设置atexit、命令行参数等。如果您真的很好奇,请使用 IDA Pro 的免费演示版 (https://www.hex-rays.com/products/ida/support/download_demo.shtml) 反汇编它们

关于c - 程序集与 C 可执行文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649700/

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