TeX는 메모리 부족 상황을 분석하고 최적화하기 위해 "힙 덤프"를 생성할 수 있습니까?

TeX는 메모리 부족 상황을 분석하고 최적화하기 위해 "힙 덤프"를 생성할 수 있습니까?

메모리를 많이 사용하는 패키지 pgfplots의 패키지 작성자로서 저는 메모리 부족 상황을 분석해 달라는 요청을 받았습니다.

나는 "범인"을 식별할 수 있었습니다. \pdfmdfivesum마침내 충돌이 발생한 전화였습니다 .

메모리 제한을 확대하거나 방지하는 방법에 대한 몇 가지 해결 방법을 알고 있으므로 문제를 방지하는 방법에 대한 제안은 피하시기 바랍니다.

나의 동기는 다음과 같습니다. 소프트웨어 엔지니어로서 나는 현재 어떤 "단어" 등이 얼마나 많은 메모리를 차지하고 있는지 검사할 수 있는 일종의 "힙 덤프"를 원했습니다. 이를 통해 최적화와 체계적인 개선이 가능해질 수 있습니다. 즉, 사용되지 않는 레지스터를 지우거나 매크로 확장 등을 재구성하는 것입니다.

사람이 읽을 수 있는 힙 덤프를 생성할 수 있는지 알고 계십니까?


다음은 제가 해결하려고 시도한 문제에 대한 추가 통찰력입니다.

개인적으로 저는 이 섹션이 위의 질문과 다소 관련이 없다고 생각합니다. 당면한 문제에 대한 간단한 해결책이 있더라도 답변을 듣고 싶습니다.

어쨌든 상황을 개선할 수 있는 방법이 있으면 잘 들어보겠습니다.

문제는 메인 메모리 크기였습니다. 분명히 matlab2tikz(많은!) 데이터 포인트와 함께 독립형 pgfplots 그림이 포함된 300k 파일이 생성되었습니다. 그리고 틱즈external 라이브러리는 MD5 해시를 계산하기 위해 해당 파일을 주 메모리에 로드하려고 시도했습니다. 이것은 실패했습니다. MD5 계산이 없으면 파일은~할 수 있었다처리됩니다. 실제로 tikz 외부 lib는 이러한 300,000 단어를 포함하는 경우 \edef\pgfretval{\pdfmdfivesum{\meaning\tikzexternal@temp}}호출이 실패합니다. 나는 이 단어들이 TeX의 주 메모리에 두 번 이상 등장한다고 가정합니다. 어디서, 왜 그런지 배우고 싶습니다. 여기가 내가 힙 덤프를 보기를 바랐던 곳입니다.\meaning\tikzexternal@temp

Runaway definition?
->
! TeX capacity exceeded, sorry [main memory size=3000000].
\tikzexternal@hashfct ...aning \tikzexternal@temp 
                                                  }
l.105 \end{tikzpicture}
                       %
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.


Here is how much of TeX's memory you used:
 18462 strings out of 494578
 804304 string characters out of 3169744
 3000001 words of memory out of 3000000
 21352 multiletter control sequences out of 15000+200000

답변1

TeX의 핵심 엔진은 동적으로 할당된 메모리가 아닌 사전 할당된 메모리 풀을 사용합니다. 그러니 버려질 만한 힙만한 것은 없습니다.

TeX 기본 코드는 미리 할당된 메모리 풀에 내용과 포인터를 표시하는 방법을 제공하지 않습니다. 따라서 귀하의 질문에 대한 대답은 다음과 같습니다. 아니요, "유용한" TeX 힙 덤프(메모리 풀 덤프라고 불러야 함)를 생성하는 것은 불가능합니다. LuaTeX를 사용하면 TeX 기본 코드를 사용하지 않고 다시 작성된 엔진을 사용하므로 가능할 수도 있습니다.

TeX 메모리를 확장하려면 구성 파일을 편집/사용자 정의 하고 TeX 설치 단계 texmf.cnf에서 형식을 다시 생성할 수 있습니다. tex -ini그렇기 때문에 여기에 마법사가 필요합니다. 그러나 대부분의 경우 TeX 코드의 토큰화를 다시 생각하는 것이 좋습니다.

관련 정보