tcsullivan / consteval-huffman

Compile-time Huffman coding compression using C++20
The Unlicense
165 stars 10 forks source link

Don't assume compiler memoization #3

Open tcsullivan opened 3 years ago

tcsullivan commented 3 years ago

See here.

Code like below (taken from the link) calls build_node_list three times, and there's a chance this causes the compile to recompute the list with every call. There is significant compilation overhead in this project, so I wouldn't be surprised if this is the case.

auto list = build_node_list();
auto tree = std::span(new node[tree_count()] {}, tree_count());

Need to minimize recomputation, or find ways to avoid it altogether.

tcsullivan commented 3 years ago

Forced memoization for the node list, tree count, and compressed size. The JSON example now compiles ~30% faster on my desktop. The sizes are stored in constexpr static variables, while the node list became a constexpr static object with a consteval constructor.

My attempt at memoization for the node tree failed terribly (>100% increase in compile time). I did it in the same way I did for the node list, maybe I messed something up; I'll continue to look into it.