GCC,铛/ LLVM,exe文件大小

问题描述 投票:2回答:1

的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;
}
  • 此代码。铛创建充其量(-O1键)exe文件312千字节的大小。 GCC创建66 KB大小的exe反正。怎么了?为什么编译器之间如此不同?我看机器代码,但不明白。现在,我想的Visual Studio 2019 - 26 KB!的Visual Studio 2019的表现结果接近汇编(文件大小)。
gcc clang exe
1个回答
0
投票

ClangGCC是两个完全独立的编译器。当您在源语言编写代码,您只指定要的机器要执行什么,不应该怎么做。编译器在选择他们的方式到那里,只要他们保持由您的源语言规定的范围内自由。所以这并不奇怪,这两个导致可执行文件大小不同。也由两个编译器所选择的指令可能差别很大(或完全),因为有,例如,十几个不同的方式来表示在机器代码循环(包括取目标处理器的并行执行的优点...或不)。您可能希望从2017年(https://www.youtube.com/watch?v=bSkpMdDe4g4)看看马特Godbolt的谈话;这可以给你一个简短而详尽的介绍在什么实际的编译器(你)做幕后。

© www.soinside.com 2019 - 2024. All rights reserved.