16 #define link(x) (mem[(x)].hh.rh)
18 #define info(x) (mem[(x)].hh.UU.lh)
21 #define empty_flag MAX_HALF_WORD
23 #define is_empty(x) (link(x) == empty_flag)
25 #define node_size info
27 #define llink(x) info(x+1)
29 #define rlink(x) link(x+1)
34 #define FREE_AVAIL(x) (link(x) = avail, avail = (x), dyn_used -= CHAR_NODE_SIZE)
37 #define FAST_GET_AVAIL(x) \
39 if (((x) = avail) != null) { \
40 type(x) = charnodetype; \
43 dyn_used += CHAR_NODE_SIZE; \
52 #define FREE_AVAIL(x) (link(x) = avail, avail = (x))
54 #define FAST_GET_AVAIL(x) \
56 if (((x) = avail)) { \
57 type(x) = charnodetype; \
69 #define P_clrbits_B(trie, idx, z, w) trie[(idx) >> 3] &= ~(1 << ((idx)&7))
70 #define P_getbits_UB(trie, h, z, w) (trie[(h) >> 3] & (1 << ((h)&7)))
71 #define P_putbits_UB(trie, h, y, z, w) trie[(h) >> 3] |= 1 << ((h)&7)
77 #define zeroglue MEM_BOT
79 #define filglue (zeroglue + gluespecsize)
81 #define fillglue (filglue + gluespecsize)
83 #define ssglue (fillglue + gluespecsize)
85 #define filnegglue (ssglue + gluespecsize)
87 #define lomemstatmax (filnegglue + gluespecsize - 1)
90 #define pageinshead (MEM_TOP-CHAR_NODE_SIZE+1)
92 #define contribhead (pageinshead-CHAR_NODE_SIZE)
94 #define pagehead (contribhead-CHAR_NODE_SIZE)
96 #define temphead (pagehead-CHAR_NODE_SIZE)
98 #define holdhead (temphead-CHAR_NODE_SIZE)
100 #define adjusthead (holdhead-CHAR_NODE_SIZE)
102 #define active (adjusthead-CHAR_NODE_SIZE-CHAR_NODE_SIZE)
104 #define alignhead (active-CHAR_NODE_SIZE)
106 #define endspan (alignhead-CHAR_NODE_SIZE)
108 #define omittemplate (endspan-CHAR_NODE_SIZE)
110 #define nulllist (omittemplate-CHAR_NODE_SIZE)
112 #define ligtrick (nulllist-CHAR_NODE_SIZE)
114 #define garbage (ligtrick)
116 #define backuphead (ligtrick-CHAR_NODE_SIZE)
118 #define himemstatmin (backuphead)
122 #define himemstatusage 14
uint32_t HalfWord
[p43#113]: HalfWord(16=>32) .
Definition: tex_types.h:127
HalfWord get_node(Integer s)
[p47#125] variable-size node allocation
Definition: mem.c:91
Integer dyn_used
[#117] how much memory is in use.
Definition: mem.c:26
Pointer lo_mem_max
[#116] the largest location of variable-size memory.
Definition: mem.c:24
MemoryWord mem[MEM_MAX - MEM_MIN+1]
[#116] the big dynamic storage area.
Definition: mem.c:23
void sort_avail(void)
p49#131: sorts the available variable-size nodes by location used at #1311
Definition: mem.c:213
Pointer rover
[#124] points to some node in the list of empties.
Definition: mem.c:29
Pointer get_lo_mem_max(void)
Definition: mem.c:32
void free_node(Pointer p, HalfWord s)
[p48#130]: variable-size node liberation
Definition: mem.c:191
Pointer temp_ptr
[#115] for occasional emergency use.
Definition: mem.c:22
Pointer get_avail(void)
[p45#120]: single-word node allocation.
Definition: mem.c:36
Pointer hi_mem_min
[#116] the smallest location of one-word memory.
Definition: mem.c:25
Pointer avail
[#118] head of the list of available one-word nodes.
Definition: mem.c:27
void flush_list(HalfWord p)
[p46#123]: makes list of single-word nodes available
Definition: mem.c:70
Pointer mem_end
[#118] the last one-word node used in mem.
Definition: mem.c:28
Integer var_used
Definition: mem.c:26
UChar was_free[(MEM_MAX - MEM_MIN+8)/8]
[#165] previously free cells, 以 byte(8) 分配,按位取用.
Definition: mem.c:263
void mem_init_once()
[#164]
Definition: mem.c:455
UChar free_cells[(MEM_MAX - MEM_MIN+8)/8]
[#165] free: free cells, 以 byte(8) 分配,按位取用.
Definition: mem.c:261
void mem_var_init()
[p59#166]
Definition: mem.c:524
Boolean panicking
[#165] do we want to check memory constantly?
Definition: mem.c:267
void search_mem(Pointer p)
p61#172
Definition: mem.c:397
void check_mem(Boolean printlocs)
p60#167
Definition: mem.c:272
Pointer was_mem_end
[#165] previous mem_end, lo_mem_max, and hi_mem_min.
Definition: mem.c:265
#define MEM_MAX
[#11] greatest index in TeX's internal mem array.
Definition: tex_constant.h:37
#define MEM_MIN
[#11] smallest index in TeX's internal mem array.
Definition: tex_constant.h:43
Pointer was_hi_min
Definition: mem.h:145
Pointer was_lo_max
Definition: mem.h:145
int64_t Integer
Integer(64) =
Definition: tex_types.h:42
size_t Pointer
Pointer::size_t(64), a flag or a location in mem or eqtb.
Definition: tex_types.h:45
bool Boolean
布尔类型定义
Definition: tex_types.h:11
uint8_t UChar
UChar(8) = [0, 255]
Definition: tex_types.h:38
[p43#113]: MemoryWord(64) .
Definition: tex_types.h:164