Wie funktionieren GCC -Optimierungen unter der Motorhaube?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie funktionieren GCC -Optimierungen unter der Motorhaube?

Post by Anonymous »

Dieses Problem trat auf, als ich ein Programm zum Abrufen von Dateigrößen schrieb. Ich wollte mehr über die Dateiverwaltung und andere dateibezogene Dinge erfahren. Daher schrieb ich ein C ++ - Programm mit den FStream- und Dateisystembibliotheken, um eine Reihe von Informationen zu allen Dateien in einem von Benutzer angegebenen Ordner (mit Cin abgerufen) und ihren Unterordnern abgerufen zu haben. Das Programm ist nicht optimiert, weit davon entfernt, aber es ist schnell genug, um in ein paar Sekunden ein paar tausend Dateien zurückzugeben. Die Logik ist für diesen Prozess relativ einfach. Löschen Sie eine Datei "Dump.txt", erhalten Sie den Ordner mit Cin und fügt sie einem Vektor hinzu, der die Verzeichnisse enthält, die Sie durchsuchen sollen. Iterieren Sie dann die Verzeichnisse im Vektor mit einer Weile -Schleife und speichern Sie alle Dateiinformationen in einem benutzerdefinierten Struct -DateiInfo und fügen Sie sie an einen Vektor hinzu. Nachdem wir alle Dateidaten in einem Vektor haben, iterieren Sie sie durch und setzen Sie alles in 'Dump.txt' ein. Der Quellcode ist unten. < /P>

Code: Select all

#include 
#include 
#include 
using namespace std;
using namespace filesystem;

struct fileInfo {
public:
path name;
path dir;
size_t size;
fileInfo(path _filename, path _fileDir, size_t _fileSize) {
name = _filename;
dir = _fileDir;
size = _fileSize;
}
};

enum NDS {name, dir, size};
const map byteSuffixes = {
{0, "bytes"},
{1, "KB"},
{2, "MB"},
{3, "GB"},
{4, "TB"}
};

void vectorSort(vector &_v, const NDS _sortby) {
vector res;
map fileSizes;
map
 fileNames;
map fileDirectories;
for (const fileInfo _f : _v) {
fileSizes.insert({_f.size, _f});
fileNames.insert({_f.name, _f});
fileDirectories.insert({_f.dir, _f});
}

switch (_sortby) {
case NDS::name: {
for (const auto name : fileNames) {res.push_back(name.second);}
break;
}
case NDS::dir: {
for (const auto directory : fileDirectories) {res.push_back(directory.second);}
break;
}
case NDS::size: {
for (const auto size : fileSizes) {res.push_back(size.second);}
break;
}
default:
break;
}

_v = res;
}

void clearFile(const string filename) {
fstream dump(filename);
if (dump.is_open()) {
dump.ignore(2);
} else {
cout  initDir;
if (!filesystem::exists(path(initDir))) {
cout  longestDirName) ? parentDir.string().length() : longestDirName;
}
}
} catch (const filesystem_error& e) {
cerr

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post