1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-10-28 12:27:40 +00:00

Replace std::function with hyper_function for a 37% speedup in compile time.

Before:

    time c++ -O2 -DMAC -I/usr/local/include -std=c++11 -march=native
             -W -Wall -Wextra -Werror -pedantic -Wno-format-pedantic
             -Wno-missing-field-initializers -Wno-unused-parameter
             -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o

    real 2m22.508s
    user 2m20.625s
    sys  0m1.648s

After:

    time c++ -O2 -DMAC -I/usr/local/include -std=c++11 -march=native
             -W -Wall -Wextra -Werror -pedantic -Wno-format-pedantic
             -Wno-missing-field-initializers -Wno-unused-parameter
             -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o

    real 1m30.515s
    user 1m29.793s
    sys  0m0.689s

Comparing object file size:

    -rw-r--r--  1 ajo  staff  8215036 Jan  5 20:46 old-hyper.o
    -rw-r--r--  1 ajo  staff  7538072 Jan  5 20:47 new-hyper.o

Comparing number of symbols:

    nm old-hyper.o | wc -l  => 12590
    nm new-hyper.o | wc -l  =>  9742

No appreciable difference in link time; the linker takes less than
half a second in either case.
This commit is contained in:
Arthur O'Dwyer
2019-01-05 20:47:51 -05:00
committed by Zeno Rogue
parent a478bb1485
commit 87240cf990
2 changed files with 64 additions and 1 deletions

View File

@@ -7,6 +7,7 @@
#define VERNUM_HEX 0xA505
#include <stdarg.h>
#include "hyper_function.h"
namespace hr {
@@ -15,6 +16,8 @@ void ignore(T&&) {
// placate GCC's overzealous -Wunused-result
}
template<class Sig> using function = hyper_function<Sig>;
// functions and types used from the standard library
using std::vector;
using std::map;
@@ -24,7 +27,6 @@ using std::sort;
using std::multimap;
using std::set;
using std::string;
using std::function;
using std::pair;
using std::tuple;
using std::shared_ptr;