<div dir="ltr">Like I said, you need those types for most of the compilation process. It's REALLY hard to keep track of when these things don't matter any longer - you certainly need types that actually generate code all the way to LLVM-IR generation. That's for the AST types. IR types, which isn't quite the same thing.<div><br></div><div>The latter, you can do by doing "syntax-only" run on the compiler - it won't generate any LLVM-IR, so memory usage here is "only" AST. Also, prodcuing LLVM-IR output from the compiler (-S -emit-llvm) and then using `llc` to compile the IR to machine code, to determine memory usage of the IR types (obviously with other things).<br><br>[In my compiler project, I decided it's so hard to track what is needed again and what isn't, and decided to NOT free any memory for that reason - of course, not a particularly great strategy if you want to run it as a library in something else, but if I really had to, I could probably stick every object in one or more container(s) and free it all at the end]</div><div><br></div><div>--</div><div>Mats</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 30 April 2017 at 21:12, mateusz janek <span dir="ltr"><<a href="mailto:stryku2393@gmail.com" target="_blank">stryku2393@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Sorry for no response, I was quite busy.<div><br></div><div>Thanks Brian for help with the build (: Also I've tried with the g++-6 and it has same problem with the memory usage.<br><div><br></div><div>The problem here is caused by creating a lot of template class specializations. As Mats partially said and I found in the llvm sources here: <a href="https://github.com/stryku/llvm/blob/master/include/llvm/IR/Type.h#L42" target="_blank">https://github.com/stryku/<wbr>llvm/blob/master/include/llvm/<wbr>IR/Type.h#L42</a> types are stored till the end of program life. AFAIU every class specialization is a separate type.</div></div><div><br></div><div>Simpler program that shows my problem is e.g. <a href="https://gist.github.com/stryku/986bcd6a5d5773ef0e0136a5eca97e20" target="_blank">https://gist.github.com/<wbr>stryku/<wbr>986bcd6a5d5773ef0e0136a5eca97e<wbr>20</a></div><div>There is a lot of specializations of <span style="color:rgb(121,93,163);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">values_container</span>, <span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">create_<wbr>container</span>, <span style="color:rgb(121,93,163);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">create_impl etc</span>. Additionally every values_container have a lot of template parameters which in fact are also types (built-in types, but still).</div><div><br></div><div>For now, I'm playing with llvm and clang sources to understand what's going on there and I'll probably try to implement my own mechanism of storing a template class specializations.</div><div><br></div><div>Thanks for your interest,</div><div>Stryku</div><div><div class="h5"><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-04-29 0:02 GMT+02:00 Brian Cain <span dir="ltr"><<a href="mailto:brian.cain@gmail.com" target="_blank">brian.cain@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote"><span>On Fri, Apr 28, 2017 at 6:11 AM, mateusz janek <span dir="ltr"><<a href="mailto:stryku2393@gmail.com" target="_blank">stryku2393@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Did you use CMake? If no, ctai requres clang 4.0 and to be compiled with flags: `<span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">-std=c++1z -ftemplate-backtrace-limit=0 -ftemplate-depth=8096`</span><div><span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap"></span></div></div><div dir="ltr"><span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap"><br></span></div></blockquote><div><br></div></span><div>I got it to work with some tweaks to the CMake config. It ran quickly for me, but it did allocate a decent amount of memory on the way. Also I used a nightly build of clang and libc++ (and not libstdc++).</div><div><br></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>15.85user 0.48system 0:16.38elapsed 99%CPU (0avgtext+0avgdata 4053852maxresident)k</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>0inputs+24outputs (0major+381214minor)pagefaults 0swaps</div></div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div><br></div><div>diff:</div><div><br></div></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>diff --git a/CMakeLists.txt b/CMakeLists.txt</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>index 0143461..109d975 100644</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>--- a/CMakeLists.txt</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+++ b/CMakeLists.txt</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>@@ -1,9 +1,9 @@</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> cmake_minimum_required(VERSIO<wbr>N 3.5)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> project(ctai)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> </div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-add_definitions(-std=c++1z -ftemplate-backtrace-limit=0 -ftemplate-depth=1024)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-set(CMAKE_CXX_COMPILER clang++-3.9)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+set(CMAKE_CXX_COMPILER clang++-3.9 CACHE STRING "")</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z -stdlib=libc++ -ftemplate-backtrace-limit=0 -ftemplate-depth=8192" CACHE STRING "" FORCE)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+set(CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS} "-std=c++1z -stdlib=libc++" CACHE STRING "" FORCE)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> </div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> set(INCLUDE_FILES</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> register.hpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>diff --git a/main.cpp b/main.cpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>index b95eb4d..35e6d6f 100644</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>--- a/main.cpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+++ b/main.cpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>@@ -30,6 +30,66 @@ using code = decltype(</div></div></div></div><span><div class="gmail_extra"><div class="gmail_quote"><div><div> "mov ebx , 1 "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> "add eax , ebx "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div></span><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+ "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><span><div class="gmail_extra"><div class="gmail_quote"><div><div> "jmp .loop_label "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> ":end_label "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> "mov eax , DWORD PTR [ ebp + 16 ] "</div></div></div></div></span><div class="gmail_extra"><div class="gmail_quote"><div><div>@@ -39,4 +99,4 @@ int main()</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> {</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> std::cout << "15th element of fibonacci series is: " << cai::execute_code<code>;</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> return 0;</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-}</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>\ No newline at end of file</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+}</div></div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div> </div></div>
</div></div></div>
</blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>