TeX 引擎最初是用 Pascal 编写的,当时动态内存分配尚未普及。现代实现往往用 C 语言完成。要符合 TeX 的资格,实现必须通过标准测试,而该测试可能不会关注字符串类型和内存使用情况。
考虑以下:
\documentclass{article}
\begin{document}
\def\buffer{x}%
\let\test=\buffer
\edef\buffer{\buffer,x}%
\verb$\buffer$ = \buffer
\verb$\test$ = \test
\end{document}
问题是, 是复制\let
还是\buffer
仅仅指向\buffer
当前存储在内存中的位置?如果是前者,TeX 需要在字符串级别上进行动态内存分配。如果是后者,则每个分配的字符串都会保留在内存中,直到程序完成。这可以解释为什么放置太多tikzpicture
s 会耗尽所有资源。