当前位置:网站首页>深刻地认识到,编译器会导致编译结果的不同
深刻地认识到,编译器会导致编译结果的不同
2022-08-09 14:53:00 【黄铎彦】
以前以为说只要是windows系统,我都是c语言,api一样,编译结果也会一样。但是后来看了网友的实践,结合自己的观察,我强化了对课本内容的认识。
先上代码:
#include<stdio.h>
#pragma warning(disable:4996)//用devc++的话就不用这行
main()
{
int count = 0;
char i;
printf("输入由0和1组成的数串,按ctrl+z结束……");
while (scanf("%c", &i) != EOF)
if (i == '1')
count++;
printf("你输入了%d个1。", count);
}
上图为用vs编译的结果,下图为用devc++编译的结果。注意到,用vs编译的exe大小约为用devc++的一半。
接着看反汇编。

这下就非常明显了。用vs编译的程序,在调用第一个子过程,即执行call指令前,对rbp,rdi,rsp,rcx,rax这些寄存器进行了一系列的操作;而用devc++对rsp,rax这两个寄存器和内存进行了操作。并且可以发现对rsp的减法操作的减数也不一样。
再看看加载的dll的不同。
| 用vs编写的: | 用devc++编写的: |
| “cTest.exe”(Win32): 已加载“D:\编程\cTest\x64\Debug\cTest.exe”。已加载符号。 “cTest.exe”(Win32): 已加载“C:\Windows\System32\ntdll.dll”。 “cTest.exe”(Win32): 已加载“C:\Windows\System32\kernel32.dll”。 “cTest.exe”(Win32): 已加载“C:\Windows\System32\KernelBase.dll”。 “cTest.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140d.dll”。 “cTest.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。 | “test.exe”(Win32): 已加载“D:\编程\devctest\test.exe”。 “test.exe”(Win32): 已加载“C:\Windows\System32\ntdll.dll”。 “test.exe”(Win32): 已加载“C:\Windows\System32\kernel32.dll”。 “test.exe”(Win32): 已加载“C:\Windows\System32\KernelBase.dll”。 “test.exe”(Win32): 已加载“C:\Windows\System32\msvcrt.dll”。 |
上网查了发现,vcruntime140d.dll是来自visual c++ redistributable的:
还有ucrtbased.dll,注意,如果把这两个程序直接复制到另外一台电脑上,用vs编写的将不能正常运行。我有空的话会进一步探究这个问题。
所以课本里面说的没错,编译器也是影响程序执行结果的一个因素。
边栏推荐
- 爱因斯坦的光子理论
- 如何灵活运用量化交易接口的优势取长补短?
- MongoDB adds permission management
- How to achieve long-term benefits through the Tongdaxin quantitative trading interface?
- [Mysql]--事务、事务的隔离级别、脏读、不可重复读、幻读解析
- Startup error: Caused by: org.apache.ibatis.binding.BindingException summary solution
- EasyExcel的应用
- [MySql]实现多表查询-一对一,一对多
- 量化程序化交易如何去使用以及执行?
- navicat for Oraclel链接oracle 报错oracle library is not loaded的解决办法
猜你喜欢
随机推荐
What drives the development of quantitative trading interfaces?
百度地图——地图找房功能
Grad CAM 模型可视化
Matlab修改Consolas字体
JVM简学笔记
docke安装mysql以及主从搭建(并且指定数据生成路径)
What are the hot topics in quantitative programmatic trading?
[Basic version] Integer addition, subtraction, multiplication and division calculator
如何保证电脑硬盘格式化后数据不能被恢复?
对于程序化交易,重在预测还是重在对策呢?
浅谈一下量化交易与程序化交易
focal loss原理及简单代码实现
如何灵活运用量化交易接口的优势取长补短?
[ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
MongoDB adds permission management
【超级账本开发者系列】专访——肖慧 : 不忘初心,方得始终
Shell编程之循环语句
redis从入门到精通
Mysql两个引擎对比
For programming trading, focusing on forecast or on countermeasures?









