gpt4 book ai didi

GCC、clang/llvm、exe 文件大小

转载 作者:行者123 更新时间:2023-12-05 07:26:46 26 4
gpt4 key购买 nike

Windows 10、LLVM 7、GCC 8.1、Visual Studio 2019。

#include <iostream>
#include <fstream>
using namespace std;

char exe[1000000] = {};
int n = 0;
int filesize;
void read() {
int pointer = 0;
cin >> filesize;
fstream f;
f.open("s.exe", ios::in | ios::app | ios::binary);
f.seekp(pointer, ios::beg);
while (pointer < filesize) {
f.read((char*)&n,sizeof(char));
exe[pointer] = n;
pointer += 1;
}
f.close();
}
void showMassive(){
int pointer = 0;
while(pointer<filesize){
cout << pointer << ":" << (unsigned int8_t)exe[pointer] << endl;
pointer+=1;
}
}
void showAssembler(){

}
void write() {
int pointer = 0;
fstream f;
f.open("s1.exe", ios::out | ios::app | ios::binary);
f.seekp(pointer, ios::beg);
while (pointer < filesize) {
n=exe[pointer];
pointer += 1;
f.write((char*)&n,sizeof(char));
}
f.close();
}
void MachineCodeOptimizer(){
//some code
exe[1031] += 1;//just for example
}
int main(){
read();
showMassive();
showAssembler();
MachineCodeOptimizer();
write();
return 0;
}
  • 此代码。 Clang 最多创建一个 312 KB 大小的 exe 文件(-O1 键)。 GCC 无论如何都会创建 66 KB 大小的 exe。怎么了?为什么编译器之间如此不同?我看机器代码,但不明白。现在我尝试了 visual studio 2019 - 26 KB! Visual Studio 2019 显示接近汇编程序的结果(文件大小)。

最佳答案

ClangGCC 是两个完全独立的编译器。当您用源语言编写代码时,您只需指定您希望机器执行的内容,而不是如何它应该执行的操作。编译器可以自由选择到达那里的方式,只要他们保持在源语言指定的限制内。因此,这两个生成的可执行文件的文件大小不同也就不足为奇了。此外,两个编译器选择的指令可能会有很大(或完全)不同,因为例如,有十几种不同的方法来表示机器代码中的循环(包括利用目标处理器的并行执行......或不).您可能想查看 Matt Godbolt 在 2017 年的演讲 (https://www.youtube.com/watch?v=bSkpMdDe4g4);这可以简短但详尽地介绍编译器在幕后实际(为您)做了什么。

关于GCC、clang/llvm、exe 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54281255/

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