\input gets slower after each \input

Phelype Oleinik phe.h.o1 at gmail.com
Tue Apr 27 17:07:26 CEST 2021


On 27/04/2021 04:38, Ulrike Fischer wrote:
> Am Mon, 26 Apr 2021 20:19:51 -0300 schrieb Phelype Oleinik:
> 
>> Dear list,
>>
>> I was doing some tests with file reading and I found that \input gets
>> a tiny bit slower each time it is used.  Why is that?
>>
>> I made a test document that shows this behaviour.
> 
> miktex dies with ! TeX capacity exceeded, sorry [pool size=3208635]
> on your example.
> 
> Looking at the stats, one can see that every input adds to pool:
> 
> 310211 string characters out of 6150784
> 620211 string characters out of 6150784

Yes, it does because TeX has to remember the file stack for error
reporting, so names are kept on the string pool.

(in fact, my example also explodes also on TeX Live because I added
  twice too many |\test| in the test document, but I didn't notice
  because of |\batchmode|.  Sorry about that.)

I knew about |\input| taking space in the string pool but I didn't think
that would be the cause because memory access takes constant time.
However this stackexchange post was brought to my attention:
   https://tex.stackexchange.com/a/450056
in which the user ShreevatsaR does an in-depth debugging to find out
that the system-dependent changes actually implement a string search,
which then takes the linear time showed in that example.

I do wonder nowadays how good is the tradeoff between saving some string
memory compared to the speed penalty...  Is the string space saved only
when identical file names are input?  If so, I don't think that happens
often enough to justify the effort, does it?

Phelype


More information about the tex-live mailing list.