pinskia at gcc dot gnu dot org wrote:- > > ------- Additional Comments From pinskia at gcc dot gnu dot org 2004-12-14 > 05:53 ------- > The first thing is that read_file_guts mallocs the whole file which seems > wrong. That accounts for > 500M. > The next problem is that keep every identifier we parsed even though we don't > need it. > 3014 calls for 12,273,008 bytes: thread_a000a1ec |0x0 | _dyld_start | _start > | main | toplev_main | > do_compile | compile_file | c_common_parse_file | c_parse_file | yyparse | > yylex | _yylex | c_lex | > c_lex_with_flags | cpp_get_token | _cpp_lex_token | _cpp_handle_directive | > do_ifdef | lex_macro_node > | _cpp_lex_token | _cpp_lex_direct | lex_identifier | ht_lookup_with_hash | > _obstack_newchunk | > xmalloc | malloc | malloc_zone_malloc > > And this is where the problem comes from. > No there is no leak we keep a reference to all of thes identifiers but this > seems like we should not.
Not doing either of these involves a major rework of cpplib FWIW. I happen to think it would be beneficial, but I also think that the whole approach CPP takes needs rethinking. Neil.