-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathindex.html
More file actions
499 lines (436 loc) · 57.9 KB
/
index.html
File metadata and controls
499 lines (436 loc) · 57.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
<!DOCTYPE html>
<html>
<head> <meta charset="utf-8">
<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0">
<meta name="author" content="微信公众号:颜家大少">
<meta name="email" content="3056432@qq.com">
<meta name="description" content="一个Markdown在线转换工具,让Markdown内容,不需作任何调整就能同时在微信公众号、博客园、掘金、csdn等平台正确显示当前预览的效果">
<title>StormQ's Blog</title>
<style type="text/css" id="markdown_preview_css">
.output_wrapper pre code{font-family: Consolas, Inconsolata, Courier, monospace; display: block !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important;}
.output_wrapper a:hover { text-decoration: underline; color: rgb(0, 96, 100); }
.output_wrapper figcaption { margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em; }
.output_wrapper pre code .linenum { padding-right: 20px; word-spacing: 0px; }
.task-list-list { list-style-type: none; }
.task-list-list.checked { color: rgb(62, 62, 62); }
.task-list-list.uncheck { color: rgb(191, 193, 191); }
.task-list-list .icon_uncheck, .task-list-list .icon_check { display: inline-block; vertical-align: middle; margin-right: 10px; }
.task-list-list .icon_check::before { content: "√"; border: 2px solid rgb(62, 62, 62); color: red; }
.task-list-list .icon_uncheck::before { content: "x"; border: 2px solid rgb(191, 193, 191); color: rgb(191, 193, 191); }
.task-list-list .icon_check::before, .task-list-list .icon_uncheck::before { padding: 2px 8px 2px 5px; border-radius: 5px; }
@font-face { font-family: "KaTeX_AMS"; src: url("fonts/KaTeX_AMS-Regular.woff2") format("woff2"), url("fonts/KaTeX_AMS-Regular.woff") format("woff"), url("fonts/KaTeX_AMS-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Caligraphic"; src: url("fonts/KaTeX_Caligraphic-Bold.woff2") format("woff2"), url("fonts/KaTeX_Caligraphic-Bold.woff") format("woff"), url("fonts/KaTeX_Caligraphic-Bold.ttf") format("truetype"); font-style: normal; font-weight: bold; }
@font-face { font-family: "KaTeX_Caligraphic"; src: url("fonts/KaTeX_Caligraphic-Regular.woff2") format("woff2"), url("fonts/KaTeX_Caligraphic-Regular.woff") format("woff"), url("fonts/KaTeX_Caligraphic-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Fraktur"; src: url("fonts/KaTeX_Fraktur-Bold.woff2") format("woff2"), url("fonts/KaTeX_Fraktur-Bold.woff") format("woff"), url("fonts/KaTeX_Fraktur-Bold.ttf") format("truetype"); font-style: normal; font-weight: bold; }
@font-face { font-family: "KaTeX_Fraktur"; src: url("fonts/KaTeX_Fraktur-Regular.woff2") format("woff2"), url("fonts/KaTeX_Fraktur-Regular.woff") format("woff"), url("fonts/KaTeX_Fraktur-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Main"; src: url("fonts/KaTeX_Main-Bold.woff2") format("woff2"), url("fonts/KaTeX_Main-Bold.woff") format("woff"), url("fonts/KaTeX_Main-Bold.ttf") format("truetype"); font-style: normal; font-weight: bold; }
@font-face { font-family: "KaTeX_Main"; src: url("fonts/KaTeX_Main-BoldItalic.woff2") format("woff2"), url("fonts/KaTeX_Main-BoldItalic.woff") format("woff"), url("fonts/KaTeX_Main-BoldItalic.ttf") format("truetype"); font-style: italic; font-weight: bold; }
@font-face { font-family: "KaTeX_Main"; src: url("fonts/KaTeX_Main-Italic.woff2") format("woff2"), url("fonts/KaTeX_Main-Italic.woff") format("woff"), url("fonts/KaTeX_Main-Italic.ttf") format("truetype"); font-style: italic; font-weight: normal; }
@font-face { font-family: "KaTeX_Main"; src: url("fonts/KaTeX_Main-Regular.woff2") format("woff2"), url("fonts/KaTeX_Main-Regular.woff") format("woff"), url("fonts/KaTeX_Main-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Math"; src: url("fonts/KaTeX_Math-BoldItalic.woff2") format("woff2"), url("fonts/KaTeX_Math-BoldItalic.woff") format("woff"), url("fonts/KaTeX_Math-BoldItalic.ttf") format("truetype"); font-style: italic; font-weight: bold; }
@font-face { font-family: "KaTeX_Math"; src: url("fonts/KaTeX_Math-Italic.woff2") format("woff2"), url("fonts/KaTeX_Math-Italic.woff") format("woff"), url("fonts/KaTeX_Math-Italic.ttf") format("truetype"); font-style: italic; font-weight: normal; }
@font-face { font-family: "KaTeX_SansSerif"; src: url("fonts/KaTeX_SansSerif-Bold.woff2") format("woff2"), url("fonts/KaTeX_SansSerif-Bold.woff") format("woff"), url("fonts/KaTeX_SansSerif-Bold.ttf") format("truetype"); font-style: normal; font-weight: bold; }
@font-face { font-family: "KaTeX_SansSerif"; src: url("fonts/KaTeX_SansSerif-Italic.woff2") format("woff2"), url("fonts/KaTeX_SansSerif-Italic.woff") format("woff"), url("fonts/KaTeX_SansSerif-Italic.ttf") format("truetype"); font-style: italic; font-weight: normal; }
@font-face { font-family: "KaTeX_SansSerif"; src: url("fonts/KaTeX_SansSerif-Regular.woff2") format("woff2"), url("fonts/KaTeX_SansSerif-Regular.woff") format("woff"), url("fonts/KaTeX_SansSerif-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Script"; src: url("fonts/KaTeX_Script-Regular.woff2") format("woff2"), url("fonts/KaTeX_Script-Regular.woff") format("woff"), url("fonts/KaTeX_Script-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Size1"; src: url("fonts/KaTeX_Size1-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size1-Regular.woff") format("woff"), url("fonts/KaTeX_Size1-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Size2"; src: url("fonts/KaTeX_Size2-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size2-Regular.woff") format("woff"), url("fonts/KaTeX_Size2-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Size3"; src: url("fonts/KaTeX_Size3-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size3-Regular.woff") format("woff"), url("fonts/KaTeX_Size3-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Size4"; src: url("fonts/KaTeX_Size4-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size4-Regular.woff") format("woff"), url("fonts/KaTeX_Size4-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@font-face { font-family: "KaTeX_Typewriter"; src: url("fonts/KaTeX_Typewriter-Regular.woff2") format("woff2"), url("fonts/KaTeX_Typewriter-Regular.woff") format("woff"), url("fonts/KaTeX_Typewriter-Regular.ttf") format("truetype"); font-style: normal; font-weight: normal; }
@media screen {
.katex .mtable .vertical-separator { min-width: 1px; }
.katex .mfrac .frac-line, .katex .overline .overline-line, .katex .underline .underline-line, .katex .hline, .katex .hdashline, .katex .rule { min-height: 1px; }
}
.katex-display { display: block; margin: 1em 0px; text-align: center; }
.katex-display > .katex { display: block; text-align: center; white-space: nowrap; }
.katex-display > .katex > .katex-html { display: block; }
.katex-display > .katex > .katex-html > .tag { position: absolute; right: 0px; }
.katex { font: 1.21em / 1.2 KaTeX_Main, Times New Roman, serif; text-indent: 0px; text-rendering: auto; }
.katex * { }
.katex .katex-mathml { position: absolute; clip: rect(1px, 1px, 1px, 1px); padding: 0px; border: 0px none; height: 1px; width: 1px; overflow: hidden; }
.katex .katex-html { }
.katex .katex-html > .newline { display: block; }
.katex .base { position: relative; display: inline-block; white-space: nowrap; width: min-content; }
.katex .strut { display: inline-block; }
.katex .textbf { font-weight: bold; }
.katex .textit { font-style: italic; }
.katex .textrm { font-family: KaTeX_Main; }
.katex .textsf { font-family: KaTeX_SansSerif; }
.katex .texttt { font-family: KaTeX_Typewriter; }
.katex .mathit { font-family: KaTeX_Math; font-style: italic; }
.katex .mathrm { font-style: normal; }
.katex .mathbf { font-family: KaTeX_Main; font-weight: bold; }
.katex .boldsymbol { font-family: KaTeX_Math; font-weight: bold; font-style: italic; }
.katex .amsrm { font-family: KaTeX_AMS; }
.katex .mathbb, .katex .textbb { font-family: KaTeX_AMS; }
.katex .mathcal { font-family: KaTeX_Caligraphic; }
.katex .mathfrak, .katex .textfrak { font-family: KaTeX_Fraktur; }
.katex .mathtt { font-family: KaTeX_Typewriter; }
.katex .mathscr, .katex .textscr { font-family: KaTeX_Script; }
.katex .mathsf, .katex .textsf { font-family: KaTeX_SansSerif; }
.katex .mainit { font-family: KaTeX_Main; font-style: italic; }
.katex .mainrm { font-family: KaTeX_Main; font-style: normal; }
.katex .vlist-t { display: inline-table; table-layout: fixed; }
.katex .vlist-r { display: table-row; }
.katex .vlist { display: table-cell; vertical-align: bottom; position: relative; }
.katex .vlist > span { display: block; height: 0px; position: relative; }
.katex .vlist > span > span { display: inline-block; }
.katex .vlist > span > .pstrut { overflow: hidden; width: 0px; }
.katex .vlist-t2 { margin-right: -2px; }
.katex .vlist-s { display: table-cell; vertical-align: bottom; font-size: 1px; width: 2px; min-width: 2px; }
.katex .msupsub { text-align: left; }
.katex .mfrac > span > span { text-align: center; }
.katex .mfrac .frac-line { display: inline-block; width: 100%; border-bottom-style: solid; }
.katex .mspace { display: inline-block; }
.katex .llap, .katex .rlap, .katex .clap { width: 0px; position: relative; }
.katex .llap > .inner, .katex .rlap > .inner, .katex .clap > .inner { position: absolute; }
.katex .llap > .fix, .katex .rlap > .fix, .katex .clap > .fix { display: inline-block; }
.katex .llap > .inner { right: 0px; }
.katex .rlap > .inner, .katex .clap > .inner { left: 0px; }
.katex .clap > .inner > span { margin-left: -50%; margin-right: 50%; }
.katex .rule { display: inline-block; border: 0px solid; position: relative; }
.katex .overline .overline-line, .katex .underline .underline-line, .katex .hline { display: inline-block; width: 100%; border-bottom-style: solid; }
.katex .hdashline { display: inline-block; width: 100%; border-bottom-style: dashed; }
.katex .sqrt > .root { margin-left: 0.277778em; margin-right: -0.555556em; }
.katex .sizing, .katex .fontsize-ensurer { display: inline-block; }
.katex .sizing.reset-size1.size1, .katex .fontsize-ensurer.reset-size1.size1 { font-size: 1em; }
.katex .sizing.reset-size1.size2, .katex .fontsize-ensurer.reset-size1.size2 { font-size: 1.2em; }
.katex .sizing.reset-size1.size3, .katex .fontsize-ensurer.reset-size1.size3 { font-size: 1.4em; }
.katex .sizing.reset-size1.size4, .katex .fontsize-ensurer.reset-size1.size4 { font-size: 1.6em; }
.katex .sizing.reset-size1.size5, .katex .fontsize-ensurer.reset-size1.size5 { font-size: 1.8em; }
.katex .sizing.reset-size1.size6, .katex .fontsize-ensurer.reset-size1.size6 { font-size: 2em; }
.katex .sizing.reset-size1.size7, .katex .fontsize-ensurer.reset-size1.size7 { font-size: 2.4em; }
.katex .sizing.reset-size1.size8, .katex .fontsize-ensurer.reset-size1.size8 { font-size: 2.88em; }
.katex .sizing.reset-size1.size9, .katex .fontsize-ensurer.reset-size1.size9 { font-size: 3.456em; }
.katex .sizing.reset-size1.size10, .katex .fontsize-ensurer.reset-size1.size10 { font-size: 4.148em; }
.katex .sizing.reset-size1.size11, .katex .fontsize-ensurer.reset-size1.size11 { font-size: 4.976em; }
.katex .sizing.reset-size2.size1, .katex .fontsize-ensurer.reset-size2.size1 { font-size: 0.833333em; }
.katex .sizing.reset-size2.size2, .katex .fontsize-ensurer.reset-size2.size2 { font-size: 1em; }
.katex .sizing.reset-size2.size3, .katex .fontsize-ensurer.reset-size2.size3 { font-size: 1.16667em; }
.katex .sizing.reset-size2.size4, .katex .fontsize-ensurer.reset-size2.size4 { font-size: 1.33333em; }
.katex .sizing.reset-size2.size5, .katex .fontsize-ensurer.reset-size2.size5 { font-size: 1.5em; }
.katex .sizing.reset-size2.size6, .katex .fontsize-ensurer.reset-size2.size6 { font-size: 1.66667em; }
.katex .sizing.reset-size2.size7, .katex .fontsize-ensurer.reset-size2.size7 { font-size: 2em; }
.katex .sizing.reset-size2.size8, .katex .fontsize-ensurer.reset-size2.size8 { font-size: 2.4em; }
.katex .sizing.reset-size2.size9, .katex .fontsize-ensurer.reset-size2.size9 { font-size: 2.88em; }
.katex .sizing.reset-size2.size10, .katex .fontsize-ensurer.reset-size2.size10 { font-size: 3.45667em; }
.katex .sizing.reset-size2.size11, .katex .fontsize-ensurer.reset-size2.size11 { font-size: 4.14667em; }
.katex .sizing.reset-size3.size1, .katex .fontsize-ensurer.reset-size3.size1 { font-size: 0.714286em; }
.katex .sizing.reset-size3.size2, .katex .fontsize-ensurer.reset-size3.size2 { font-size: 0.857143em; }
.katex .sizing.reset-size3.size3, .katex .fontsize-ensurer.reset-size3.size3 { font-size: 1em; }
.katex .sizing.reset-size3.size4, .katex .fontsize-ensurer.reset-size3.size4 { font-size: 1.14286em; }
.katex .sizing.reset-size3.size5, .katex .fontsize-ensurer.reset-size3.size5 { font-size: 1.28571em; }
.katex .sizing.reset-size3.size6, .katex .fontsize-ensurer.reset-size3.size6 { font-size: 1.42857em; }
.katex .sizing.reset-size3.size7, .katex .fontsize-ensurer.reset-size3.size7 { font-size: 1.71429em; }
.katex .sizing.reset-size3.size8, .katex .fontsize-ensurer.reset-size3.size8 { font-size: 2.05714em; }
.katex .sizing.reset-size3.size9, .katex .fontsize-ensurer.reset-size3.size9 { font-size: 2.46857em; }
.katex .sizing.reset-size3.size10, .katex .fontsize-ensurer.reset-size3.size10 { font-size: 2.96286em; }
.katex .sizing.reset-size3.size11, .katex .fontsize-ensurer.reset-size3.size11 { font-size: 3.55429em; }
.katex .sizing.reset-size4.size1, .katex .fontsize-ensurer.reset-size4.size1 { font-size: 0.625em; }
.katex .sizing.reset-size4.size2, .katex .fontsize-ensurer.reset-size4.size2 { font-size: 0.75em; }
.katex .sizing.reset-size4.size3, .katex .fontsize-ensurer.reset-size4.size3 { font-size: 0.875em; }
.katex .sizing.reset-size4.size4, .katex .fontsize-ensurer.reset-size4.size4 { font-size: 1em; }
.katex .sizing.reset-size4.size5, .katex .fontsize-ensurer.reset-size4.size5 { font-size: 1.125em; }
.katex .sizing.reset-size4.size6, .katex .fontsize-ensurer.reset-size4.size6 { font-size: 1.25em; }
.katex .sizing.reset-size4.size7, .katex .fontsize-ensurer.reset-size4.size7 { font-size: 1.5em; }
.katex .sizing.reset-size4.size8, .katex .fontsize-ensurer.reset-size4.size8 { font-size: 1.8em; }
.katex .sizing.reset-size4.size9, .katex .fontsize-ensurer.reset-size4.size9 { font-size: 2.16em; }
.katex .sizing.reset-size4.size10, .katex .fontsize-ensurer.reset-size4.size10 { font-size: 2.5925em; }
.katex .sizing.reset-size4.size11, .katex .fontsize-ensurer.reset-size4.size11 { font-size: 3.11em; }
.katex .sizing.reset-size5.size1, .katex .fontsize-ensurer.reset-size5.size1 { font-size: 0.555556em; }
.katex .sizing.reset-size5.size2, .katex .fontsize-ensurer.reset-size5.size2 { font-size: 0.666667em; }
.katex .sizing.reset-size5.size3, .katex .fontsize-ensurer.reset-size5.size3 { font-size: 0.777778em; }
.katex .sizing.reset-size5.size4, .katex .fontsize-ensurer.reset-size5.size4 { font-size: 0.888889em; }
.katex .sizing.reset-size5.size5, .katex .fontsize-ensurer.reset-size5.size5 { font-size: 1em; }
.katex .sizing.reset-size5.size6, .katex .fontsize-ensurer.reset-size5.size6 { font-size: 1.11111em; }
.katex .sizing.reset-size5.size7, .katex .fontsize-ensurer.reset-size5.size7 { font-size: 1.33333em; }
.katex .sizing.reset-size5.size8, .katex .fontsize-ensurer.reset-size5.size8 { font-size: 1.6em; }
.katex .sizing.reset-size5.size9, .katex .fontsize-ensurer.reset-size5.size9 { font-size: 1.92em; }
.katex .sizing.reset-size5.size10, .katex .fontsize-ensurer.reset-size5.size10 { font-size: 2.30444em; }
.katex .sizing.reset-size5.size11, .katex .fontsize-ensurer.reset-size5.size11 { font-size: 2.76444em; }
.katex .sizing.reset-size6.size1, .katex .fontsize-ensurer.reset-size6.size1 { font-size: 0.5em; }
.katex .sizing.reset-size6.size2, .katex .fontsize-ensurer.reset-size6.size2 { font-size: 0.6em; }
.katex .sizing.reset-size6.size3, .katex .fontsize-ensurer.reset-size6.size3 { font-size: 0.7em; }
.katex .sizing.reset-size6.size4, .katex .fontsize-ensurer.reset-size6.size4 { font-size: 0.8em; }
.katex .sizing.reset-size6.size5, .katex .fontsize-ensurer.reset-size6.size5 { font-size: 0.9em; }
.katex .sizing.reset-size6.size6, .katex .fontsize-ensurer.reset-size6.size6 { font-size: 1em; }
.katex .sizing.reset-size6.size7, .katex .fontsize-ensurer.reset-size6.size7 { font-size: 1.2em; }
.katex .sizing.reset-size6.size8, .katex .fontsize-ensurer.reset-size6.size8 { font-size: 1.44em; }
.katex .sizing.reset-size6.size9, .katex .fontsize-ensurer.reset-size6.size9 { font-size: 1.728em; }
.katex .sizing.reset-size6.size10, .katex .fontsize-ensurer.reset-size6.size10 { font-size: 2.074em; }
.katex .sizing.reset-size6.size11, .katex .fontsize-ensurer.reset-size6.size11 { font-size: 2.488em; }
.katex .sizing.reset-size7.size1, .katex .fontsize-ensurer.reset-size7.size1 { font-size: 0.416667em; }
.katex .sizing.reset-size7.size2, .katex .fontsize-ensurer.reset-size7.size2 { font-size: 0.5em; }
.katex .sizing.reset-size7.size3, .katex .fontsize-ensurer.reset-size7.size3 { font-size: 0.583333em; }
.katex .sizing.reset-size7.size4, .katex .fontsize-ensurer.reset-size7.size4 { font-size: 0.666667em; }
.katex .sizing.reset-size7.size5, .katex .fontsize-ensurer.reset-size7.size5 { font-size: 0.75em; }
.katex .sizing.reset-size7.size6, .katex .fontsize-ensurer.reset-size7.size6 { font-size: 0.833333em; }
.katex .sizing.reset-size7.size7, .katex .fontsize-ensurer.reset-size7.size7 { font-size: 1em; }
.katex .sizing.reset-size7.size8, .katex .fontsize-ensurer.reset-size7.size8 { font-size: 1.2em; }
.katex .sizing.reset-size7.size9, .katex .fontsize-ensurer.reset-size7.size9 { font-size: 1.44em; }
.katex .sizing.reset-size7.size10, .katex .fontsize-ensurer.reset-size7.size10 { font-size: 1.72833em; }
.katex .sizing.reset-size7.size11, .katex .fontsize-ensurer.reset-size7.size11 { font-size: 2.07333em; }
.katex .sizing.reset-size8.size1, .katex .fontsize-ensurer.reset-size8.size1 { font-size: 0.347222em; }
.katex .sizing.reset-size8.size2, .katex .fontsize-ensurer.reset-size8.size2 { font-size: 0.416667em; }
.katex .sizing.reset-size8.size3, .katex .fontsize-ensurer.reset-size8.size3 { font-size: 0.486111em; }
.katex .sizing.reset-size8.size4, .katex .fontsize-ensurer.reset-size8.size4 { font-size: 0.555556em; }
.katex .sizing.reset-size8.size5, .katex .fontsize-ensurer.reset-size8.size5 { font-size: 0.625em; }
.katex .sizing.reset-size8.size6, .katex .fontsize-ensurer.reset-size8.size6 { font-size: 0.694444em; }
.katex .sizing.reset-size8.size7, .katex .fontsize-ensurer.reset-size8.size7 { font-size: 0.833333em; }
.katex .sizing.reset-size8.size8, .katex .fontsize-ensurer.reset-size8.size8 { font-size: 1em; }
.katex .sizing.reset-size8.size9, .katex .fontsize-ensurer.reset-size8.size9 { font-size: 1.2em; }
.katex .sizing.reset-size8.size10, .katex .fontsize-ensurer.reset-size8.size10 { font-size: 1.44028em; }
.katex .sizing.reset-size8.size11, .katex .fontsize-ensurer.reset-size8.size11 { font-size: 1.72778em; }
.katex .sizing.reset-size9.size1, .katex .fontsize-ensurer.reset-size9.size1 { font-size: 0.289352em; }
.katex .sizing.reset-size9.size2, .katex .fontsize-ensurer.reset-size9.size2 { font-size: 0.347222em; }
.katex .sizing.reset-size9.size3, .katex .fontsize-ensurer.reset-size9.size3 { font-size: 0.405093em; }
.katex .sizing.reset-size9.size4, .katex .fontsize-ensurer.reset-size9.size4 { font-size: 0.462963em; }
.katex .sizing.reset-size9.size5, .katex .fontsize-ensurer.reset-size9.size5 { font-size: 0.520833em; }
.katex .sizing.reset-size9.size6, .katex .fontsize-ensurer.reset-size9.size6 { font-size: 0.578704em; }
.katex .sizing.reset-size9.size7, .katex .fontsize-ensurer.reset-size9.size7 { font-size: 0.694444em; }
.katex .sizing.reset-size9.size8, .katex .fontsize-ensurer.reset-size9.size8 { font-size: 0.833333em; }
.katex .sizing.reset-size9.size9, .katex .fontsize-ensurer.reset-size9.size9 { font-size: 1em; }
.katex .sizing.reset-size9.size10, .katex .fontsize-ensurer.reset-size9.size10 { font-size: 1.20023em; }
.katex .sizing.reset-size9.size11, .katex .fontsize-ensurer.reset-size9.size11 { font-size: 1.43981em; }
.katex .sizing.reset-size10.size1, .katex .fontsize-ensurer.reset-size10.size1 { font-size: 0.24108em; }
.katex .sizing.reset-size10.size2, .katex .fontsize-ensurer.reset-size10.size2 { font-size: 0.289296em; }
.katex .sizing.reset-size10.size3, .katex .fontsize-ensurer.reset-size10.size3 { font-size: 0.337512em; }
.katex .sizing.reset-size10.size4, .katex .fontsize-ensurer.reset-size10.size4 { font-size: 0.385728em; }
.katex .sizing.reset-size10.size5, .katex .fontsize-ensurer.reset-size10.size5 { font-size: 0.433944em; }
.katex .sizing.reset-size10.size6, .katex .fontsize-ensurer.reset-size10.size6 { font-size: 0.48216em; }
.katex .sizing.reset-size10.size7, .katex .fontsize-ensurer.reset-size10.size7 { font-size: 0.578592em; }
.katex .sizing.reset-size10.size8, .katex .fontsize-ensurer.reset-size10.size8 { font-size: 0.694311em; }
.katex .sizing.reset-size10.size9, .katex .fontsize-ensurer.reset-size10.size9 { font-size: 0.833173em; }
.katex .sizing.reset-size10.size10, .katex .fontsize-ensurer.reset-size10.size10 { font-size: 1em; }
.katex .sizing.reset-size10.size11, .katex .fontsize-ensurer.reset-size10.size11 { font-size: 1.19961em; }
.katex .sizing.reset-size11.size1, .katex .fontsize-ensurer.reset-size11.size1 { font-size: 0.200965em; }
.katex .sizing.reset-size11.size2, .katex .fontsize-ensurer.reset-size11.size2 { font-size: 0.241158em; }
.katex .sizing.reset-size11.size3, .katex .fontsize-ensurer.reset-size11.size3 { font-size: 0.281351em; }
.katex .sizing.reset-size11.size4, .katex .fontsize-ensurer.reset-size11.size4 { font-size: 0.321543em; }
.katex .sizing.reset-size11.size5, .katex .fontsize-ensurer.reset-size11.size5 { font-size: 0.361736em; }
.katex .sizing.reset-size11.size6, .katex .fontsize-ensurer.reset-size11.size6 { font-size: 0.401929em; }
.katex .sizing.reset-size11.size7, .katex .fontsize-ensurer.reset-size11.size7 { font-size: 0.482315em; }
.katex .sizing.reset-size11.size8, .katex .fontsize-ensurer.reset-size11.size8 { font-size: 0.578778em; }
.katex .sizing.reset-size11.size9, .katex .fontsize-ensurer.reset-size11.size9 { font-size: 0.694534em; }
.katex .sizing.reset-size11.size10, .katex .fontsize-ensurer.reset-size11.size10 { font-size: 0.833601em; }
.katex .sizing.reset-size11.size11, .katex .fontsize-ensurer.reset-size11.size11 { font-size: 1em; }
.katex .delimsizing.size1 { font-family: KaTeX_Size1; }
.katex .delimsizing.size2 { font-family: KaTeX_Size2; }
.katex .delimsizing.size3 { font-family: KaTeX_Size3; }
.katex .delimsizing.size4 { font-family: KaTeX_Size4; }
.katex .delimsizing.mult .delim-size1 > span { font-family: KaTeX_Size1; }
.katex .delimsizing.mult .delim-size4 > span { font-family: KaTeX_Size4; }
.katex .nulldelimiter { display: inline-block; width: 0.12em; }
.katex .delimcenter { position: relative; }
.katex .op-symbol { position: relative; }
.katex .op-symbol.small-op { font-family: KaTeX_Size1; }
.katex .op-symbol.large-op { font-family: KaTeX_Size2; }
.katex .op-limits > .vlist-t { text-align: center; }
.katex .accent > .vlist-t { text-align: center; }
.katex .accent .accent-body:not(.accent-full) { width: 0px; }
.katex .accent .accent-body { position: relative; }
.katex .overlay { display: block; }
.katex .mtable .vertical-separator { display: inline-block; margin: 0px -0.025em; border-right: 0.05em solid; }
.katex .mtable .vs-dashed { border-right: 0.05em dashed; }
.katex .mtable .arraycolsep { display: inline-block; }
.katex .mtable .col-align-c > .vlist-t { text-align: center; }
.katex .mtable .col-align-l > .vlist-t { text-align: left; }
.katex .mtable .col-align-r > .vlist-t { text-align: right; }
.katex .svg-align { text-align: left; }
.katex svg, .screenShotTempCanvas { display: block; position: absolute; width: 100%; height: inherit; fill: currentcolor; stroke: currentcolor; fill-rule: nonzero; fill-opacity: 1; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0px; stroke-opacity: 1; }
.katex svg path { stroke: none; }
.katex .stretchy { width: 100%; display: block; position: relative; overflow: hidden; }
.katex .stretchy::before, .katex .stretchy::after { content: ""; }
.katex .hide-tail { width: 100%; position: relative; overflow: hidden; }
.katex .halfarrow-left { position: absolute; left: 0px; width: 50.2%; overflow: hidden; }
.katex .halfarrow-right { position: absolute; right: 0px; width: 50.2%; overflow: hidden; }
.katex .brace-left { position: absolute; left: 0px; width: 25.1%; overflow: hidden; }
.katex .brace-center { position: absolute; left: 25%; width: 50%; overflow: hidden; }
.katex .brace-right { position: absolute; right: 0px; width: 25.1%; overflow: hidden; }
.katex .x-arrow-pad { padding: 0px 0.5em; }
.katex .x-arrow, .katex .mover, .katex .munder { text-align: center; }
.katex .boxpad { padding: 0px 0.3em; }
.katex .fbox { box-sizing: border-box; border: 0.04em solid black; }
.katex .fcolorbox { box-sizing: border-box; border: 0.04em solid; }
.katex .cancel-pad { padding: 0px 0.2em; }
.katex .cancel-lap { margin-left: -0.2em; margin-right: -0.2em; }
.katex .sout { border-bottom-style: solid; border-bottom-width: 0.08em; }
.output_wrapper pre code { display: -webkit-box !important; }
.output_wrapper .hljs{color: rgb(169, 183, 198); background: rgb(40, 43, 46) none repeat scroll 0% 0%; display: block; overflow-x: auto; padding: 0.5em;}
.output_wrapper .hljs-params{color: rgb(255, 152, 35);}
.output_wrapper .hljs-number,.output_wrapper .hljs-literal,.output_wrapper .hljs-symbol,.output_wrapper .hljs-bullet{color: rgb(174, 135, 250);}
.output_wrapper .hljs-function,.output_wrapper .hljs-built_in,.output_wrapper .hljs-name,.output_wrapper .hljs-keyword,.output_wrapper .hljs-selector-tag,.output_wrapper .hljs-deletion{color: rgb(248, 35, 117);}
.output_wrapper .hljs-variable,.output_wrapper .hljs-template-variable,.output_wrapper .hljs-link{color: rgb(98, 151, 85);}
.output_wrapper .hljs-comment,.output_wrapper .hljs-quote{color: rgb(128, 128, 128);}
.output_wrapper .hljs-meta{color: rgb(91, 218, 237);}
.output_wrapper .hljs-string,.output_wrapper .hljs-attribute,.output_wrapper .hljs-addition{color: rgb(238, 220, 112);}
.output_wrapper .hljs-attr,.output_wrapper .hljs-section,.output_wrapper .hljs-title,.output_wrapper .hljs-type{color: rgb(165, 218, 45);}
.output_wrapper .hljs-selector-class{color: rgb(165, 218, 45);}
.output_wrapper .hljs-emphasis{font-style: italic;}
.output_wrapper .hljs-strong{font-weight: bold;}
.output_wrapper pre code {line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0px; letter-spacing: 0px;}
.output_wrapper{font-size: 16px; color: rgb(62, 62, 62); line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;}
.output_wrapper *{font-size: inherit; color: inherit; line-height: inherit; margin: 0px; padding: 0px;}
.output_wrapper p{margin: 1.5em 0px;}
.output_wrapper h1,.output_wrapper h2,.output_wrapper h3,.output_wrapper h4,.output_wrapper h5,.output_wrapper h6{margin: 1.5em 0px; font-weight: bold;}
.output_wrapper h1{font-size: 1.6em;}
.output_wrapper h2{font-size: 1.4em;}
.output_wrapper h3{font-size: 1.3em;}
.output_wrapper h4{font-size: 1.2em;}
.output_wrapper h5{font-size: 1em;}
.output_wrapper h6{font-size: 1em;}
.output_wrapper h3{margin-bottom: 2em; margin-right: 5px; padding: 8px 15px; letter-spacing: 2px; background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181)); background-color: rgb(63, 81, 181); color: rgb(255, 255, 255); border-left: 10px solid rgb(51, 51, 51); border-radius: 5px; text-shadow: rgb(102, 102, 102) 1px 1px 1px; box-shadow: rgb(102, 102, 102) 1px 1px 2px;}
.output_wrapper ul,.output_wrapper ol{padding-left: 32px;}
.output_wrapper ul{list-style-type: disc;}
.output_wrapper ol{list-style-type: decimal;}
.output_wrapper li *{}
.output_wrapper li{margin-bottom: 0.5em;}
.output_wrapper .code_size_default{line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0px; letter-spacing: 0px;}
.output_wrapper .code_size_tight{line-height: 15px; font-size: 11px; font-weight: normal; word-spacing: -3px; letter-spacing: 0px;}
.output_wrapper pre code{font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0px;}
.output_wrapper blockquote{display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0px; color: rgb(129, 145, 152); border-left: 6px solid rgb(220, 230, 240); background: rgb(242, 247, 251) none repeat scroll 0% 0%; overflow: auto; overflow-wrap: normal; word-break: normal;}
.output_wrapper blockquote p{margin: 0px;}
.output_wrapper a{text-decoration: none; color: rgb(30, 107, 184); overflow-wrap: break-word;}
.output_wrapper strong{font-weight: bold;}
.output_wrapper em{font-style: italic;}
.output_wrapper del{font-style: italic;}
.output_wrapper strong em{font-weight: bold;}
.output_wrapper hr{height: 1px; margin: 1.5rem 0px; border-color: rgb(165, 165, 165) currentcolor currentcolor; border-style: dashed none none; border-width: 1px medium medium; border-image: none 100% / 1 / 0 stretch;}
.output_wrapper code{overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(233, 105, 0); background: rgb(248, 248, 248) none repeat scroll 0% 0%;}
.output_wrapper img{display: block; margin: 0px auto; max-width: 100%;}
.output_wrapper figcaption{margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;}
.output_wrapper table{display: table; width: 100%; text-align: left;}
.output_wrapper tbody{border: 0px none;}
.output_wrapper table tr{border-color: rgb(204, 204, 204) currentcolor currentcolor; border-style: solid none none; border-width: 1px 0px 0px; border-image: none 100% / 1 / 0 stretch; background-color: white;}
.output_wrapper table tr th,.output_wrapper table tr td{font-size: 1em; border: 1px solid rgb(204, 204, 204); padding: 0.5em 1em; text-align: left;}
.output_wrapper table tr th{font-weight: bold; background-color: rgb(240, 240, 240);}
.output_wrapper .katex-display{font-size: 1.22em;}
.output_wrapper .katex{padding: 8px 3px;}
.output_wrapper .katex-display > .katex{display: inline-block; text-align: center; padding: 3px;}
.output_wrapper .katex img{display: inline-block; vertical-align: middle;}
.output_wrapper a[href^="#"] sup{vertical-align: super; margin: 0px 2px; padding: 1px 3px; color: rgb(255, 255, 255); background: rgb(102, 102, 102) none repeat scroll 0% 0%; font-size: 0.7em;}
.output_wrapper .task-list-list{list-style-type: none;}
.output_wrapper .task-list-list.checked{color: rgb(62, 62, 62);}
.output_wrapper .task-list-list.uncheck{color: rgb(191, 193, 191);}
.output_wrapper .task-list-list .icon_uncheck,.output_wrapper .task-list-list .icon_check{display: inline-block; vertical-align: middle; margin-right: 10px;}
.output_wrapper .task-list-list .icon_check::before{content: "√"; border: 2px solid rgb(62, 62, 62); color: red;}
.output_wrapper .task-list-list .icon_uncheck::before{content: "x"; border: 2px solid rgb(191, 193, 191); color: rgb(191, 193, 191);}
.output_wrapper .task-list-list .icon_check::before,.output_wrapper .task-list-list .icon_uncheck::before{padding: 2px 8px 2px 5px; border-radius: 5px;}
.output_wrapper .toc{margin-left: 25px;}
.output_wrapper .toc_item{display: block;}
.output_wrapper .toc_left{margin-left: 25px;}
</style>
<style type="text/css" id="export_setting_css">body { width: 100%; margin: 0px; padding: 0px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; }
#export_content { margin: 40px 20%; padding: 20px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; }</style>
</head><body><div id="export_content"><div class="output_wrapper" id="output_wrapper_id"><h1 id="hpaligncenterfontsize6stormqsblogfontp"><span><p align="center"><strong><font size="6">StormQ's Blog</font></strong></p></span></h1>
<ul>
<li><h3 id="h"><span>目录</span></h3>
<ul>
<li><p><a href="#jump代码调试">代码调试</a></p></li>
<li><p><a href="#jump性能优化">性能优化</a></p></li>
<li><p><a href="#jump计算机系统">计算机系统</a></p></li>
<li><p><a href="#jump编译原理及实现">自制编译器</a></p></li>
<li><p><a href="#jumpLLVM编译器">LLVM 编译器</a></p></li>
<li><p><a href="#jumpTVM">TVM 编译器</a></p></li></ul></li>
</ul>
<hr>
<h3 id="hspanidjumpspan"><span><span id="jump代码调试">代码调试</span></span></h3>
<ul>
<li><p><a href="https://csstormq.github.io/blog/%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95%E7%AF%87%EF%BC%885%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%99%A8.html">代码调试篇(5):如何调试动态链接器</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95%E7%AF%87%EF%BC%884%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%20glibc%20%E6%BA%90%E7%A0%81%E2%80%94%E2%80%94%E5%87%86%E5%A4%87%E7%AF%87.html">代码调试篇(4):如何调试 glibc 源码——准备篇</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95%E7%AF%87%EF%BC%883%EF%BC%89%EF%BC%9A%E5%88%A9%E7%94%A8%20gdb%20%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%A4%8D%E6%9D%82%E6%9D%A1%E4%BB%B6%E9%80%BB%E8%BE%91%E2%80%94%E2%80%94%E4%BB%A5%20behaviac%20%E8%A1%8C%E4%B8%BA%E6%A0%91%E4%B8%BA%E4%BE%8B.html">代码调试篇(3):利用 gdb 自动化测试复杂条件逻辑——以 behaviac 行为树为例</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20gdb%20%E8%87%AA%E5%AE%9A%E4%B9%89%E5%91%BD%E4%BB%A4.html">代码调试篇(2):如何编写 gdb 自定义命令</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%BF%AB%E9%80%9F%E6%8E%8C%E6%8F%A1%20gdb%20%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.html">代码调试篇(1):零基础快速掌握 gdb 常用命令</a></p></li>
</ul>
<hr>
<h3 id="hspanidjumpspan-1"><span><span id="jump性能优化">性能优化</span></span></h3>
<ul>
<li><p><a href="https://csstormq.github.io/blog/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%AF%87%EF%BC%886%EF%BC%89%EF%BC%9ANEON%E4%BC%98%E5%8C%96%E6%A1%88%E4%BE%8B%E2%80%94%E2%80%94%E4%BD%8E%E9%98%B6%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%EF%BC%88aarch64%E7%89%88%EF%BC%89">性能优化篇(6):NEON 优化案例——低阶矩阵乘法(aarch64版)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%AF%87%EF%BC%885%EF%BC%89%EF%BC%9ANEON%E4%BC%98%E5%8C%96%E6%A1%88%E4%BE%8B%E2%80%94%E2%80%94%E5%9B%BE%E5%83%8F%E8%BD%AC%E6%8D%A2%E4%B9%8BRGBA%E5%88%B0RGB%EF%BC%88aarch64%E7%89%88%EF%BC%89">性能优化篇(5):NEON 优化案例——图像转换之 RGBA 到 RGB(aarch64版)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%AF%87%EF%BC%884%EF%BC%89%EF%BC%9ANEON%E4%BC%98%E5%8C%96%E6%A1%88%E4%BE%8B%E2%80%94%E2%80%94%E5%9B%BE%E5%83%8F%E8%BD%AC%E6%8D%A2%E4%B9%8BRGB%E5%88%B0BGR%EF%BC%88aarch64%E7%89%88%EF%BC%89">性能优化篇(4):NEON 优化案例——图像转换之 RGB 到 BGR(aarch64版)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%AF%87%EF%BC%883%EF%BC%89%EF%BC%9A%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%20NEON.html">性能优化篇(3):零基础快速入门 NEON</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9A%E5%B0%8F%E5%BF%83%E2%80%9CSTL%20%E4%BD%8E%E6%95%88%E7%8E%87%E7%94%A8%E6%B3%95%E2%80%9D%E6%89%80%E5%B8%A6%E6%9D%A5%E7%9A%84%E6%80%A7%E8%83%BD%E5%BC%80%E9%94%80">性能优化篇(2):小心“STL 低效率用法”所带来的性能开销</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E5%87%A0%E7%A7%8D%E7%AE%80%E5%8D%95%E7%9A%84%E8%AE%BF%E5%AD%98%E4%BC%98%E5%8C%96%E6%89%8B%E6%AE%B5">性能优化篇(1):几种简单的访存优化手段</a></p></li>
</ul>
<hr>
<h3 id="hspanidjumpspan-2"><span><span id="jump计算机系统">计算机系统</span></span></h3>
<ul>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%EF%BC%889%EF%BC%89%EF%BC%9A%E7%90%86%E8%A7%A3%20glibc%20malloc%20%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%EF%BC%88%E4%B8%AD%EF%BC%89">计算机系统篇之虚拟内存(9):理解 glibc malloc 的工作原理(中)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%EF%BC%888%EF%BC%89%EF%BC%9A%E7%90%86%E8%A7%A3%20glibc%20malloc%20%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%EF%BC%88%E4%B8%8A%EF%BC%89">计算机系统篇之虚拟内存(8):理解 glibc malloc 的工作原理(上)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%EF%BC%884%EF%BC%89%EF%BC%9A%E5%86%8D%E6%8E%A2%20mmap">计算机系统篇之虚拟内存(4):再探 mmap</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%EF%BC%883%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E6%96%87%E4%BB%B6%E5%9C%A8%E8%BF%9B%E7%A8%8B%E4%B9%8B%E9%97%B4%E5%AE%9E%E7%8E%B0%E6%95%B0%E6%8D%AE%E5%85%B1%E4%BA%AB">计算机系统篇之虚拟内存(3):如何使用内存映射文件在进程之间实现数据共享</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E5%BC%82%E5%B8%B8%E6%8E%A7%E5%88%B6%E6%B5%81%EF%BC%8810%EF%BC%89%EF%BC%9AChapter%208%20Exceptional%20Control%20Flow%20%E7%AB%A0%E8%8A%82%E4%B9%A0%E9%A2%98%E4%B8%8E%E8%A7%A3%E7%AD%94.html">计算机系统篇之异常控制流(10):Chapter 8 Exceptional Control Flow 章节习题与解答</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E5%BC%82%E5%B8%B8%E6%8E%A7%E5%88%B6%E6%B5%81%EF%BC%889%EF%BC%89%EF%BC%9A%E5%BC%82%E5%B8%B8%E6%8E%A7%E5%88%B6%E6%B5%81%20FAQ">计算机系统篇之异常控制流(9):异常控制流 FAQ</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E5%BC%82%E5%B8%B8%E6%8E%A7%E5%88%B6%E6%B5%81%EF%BC%887%EF%BC%89%EF%BC%9A%E5%88%A9%E7%94%A8%20fork%20%E5%92%8C%20execve%20%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E7%AE%80%E6%98%93%E7%9A%84%20shell%20%E7%A8%8B%E5%BA%8F.html">计算机系统篇之异常控制流(7):利用 fork 和 execve 实现一个简易的 shell 程序</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E5%BC%82%E5%B8%B8%E6%8E%A7%E5%88%B6%E6%B5%81%EF%BC%886%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%9C%B0%E5%9B%9E%E6%94%B6%E5%AD%90%E8%BF%9B%E7%A8%8B">计算机系统篇之异常控制流(6):如何正确地回收子进程</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E5%BC%82%E5%B8%B8%E6%8E%A7%E5%88%B6%E6%B5%81%EF%BC%884%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%9C%B0%E8%AE%A9%E8%B0%83%E7%94%A8%E7%BA%BF%E7%A8%8B%E4%BC%91%E7%9C%A0%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4">计算机系统篇之异常控制流(4):如何正确地让调用线程休眠一段时间</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8818%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E4%B8%94%E7%9B%B4%E6%8E%A5%E4%BE%9D%E8%B5%96%E7%9A%84%E5%85%B1%E4%BA%AB%E5%BA%93">计算机系统篇之链接(18):如何避免未使用的且直接依赖的共享库</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8817%EF%BC%89%EF%BC%9A%22ldd:%20Unused%20direct%20dependencies%22%20%E6%84%8F%E5%91%B3%E7%9D%80%E4%BB%80%E4%B9%88%EF%BC%9F">计算机系统篇之链接(17):"ldd: Unused direct dependencies" 意味着什么?</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8816%EF%BC%89%EF%BC%9A%E7%9C%9F%E6%AD%A3%E7%90%86%E8%A7%A3%20RTLD_NEXT%20%E7%9A%84%E4%BD%9C%E7%94%A8">计算机系统篇之链接(16):真正理解 RTLD_NEXT 的作用</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8815%EF%BC%89%EF%BC%9A%E5%85%B1%E4%BA%AB%E5%BA%93%E6%8B%A6%E6%88%AA%E6%8A%80%E6%9C%AF%E4%B9%8B%E8%BF%90%E8%A1%8C%E6%97%B6%E5%BA%93%E6%89%93%E6%A1%A9%EF%BC%88%E4%B8%8A%EF%BC%89">计算机系统篇之链接(15):共享库拦截技术之运行时库打桩</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8814%EF%BC%89%EF%BC%9A.plt%E3%80%81.plt.got%E3%80%81.got%20%E5%92%8C%20.got.plt%20section%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB">计算机系统篇之链接(14):.plt、.plt.got、.got 和 .got.plt sections 之间的区别</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8813%EF%BC%89%EF%BC%9A%E5%8D%87%E7%BA%A7%E5%85%B1%E4%BA%AB%E5%BA%93%E5%AF%BC%E8%87%B4%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E6%97%B6%E9%94%99%E8%AF%AF%E7%9A%84%E6%83%A8%E7%97%9B%E7%BB%8F%E5%8E%86.html">计算机系统篇之链接(13):升级共享库导致程序运行时错误的惨痛经历</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8812%EF%BC%89%EF%BC%9AChapter%207%20Linking%20%E4%B9%A0%E9%A2%98%E4%B8%8E%E8%A7%A3%E7%AD%94">计算机系统篇之链接(12):Chapter 7 Linking 章节习题与解答</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8811%EF%BC%89%EF%BC%9A%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E9%81%BF%E5%85%8D%E5%9C%A8%20C%E5%92%8CC++%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F">计算机系统篇之链接(11):为什么要避免在 C 和 C++ 中使用全局变量</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8810%EF%BC%89%EF%BC%9A.bss%E3%80%81.data%20%E5%92%8C%20.rodata%20section%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB">计算机系统篇之链接(10):.bss、.data 和 .rodata sections 之间的区别</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%889%EF%BC%89%EF%BC%9A%E4%BD%8D%E7%BD%AE%E6%97%A0%E5%85%B3%E4%BB%A3%E7%A0%81%EF%BC%88%E4%B8%8B%EF%BC%89%E2%80%94%E2%80%94%E7%9C%9F%E6%AD%A3%E7%90%86%E8%A7%A3%20PIC%20%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%EF%BC%88Linux%20X86-64%20%E7%A4%BA%E4%BE%8B%EF%BC%89.html">计算机系统篇之链接(9):位置无关代码(下)——真正理解 PIC 函数调用的工作原理(Linux X86-64 示例)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%888%EF%BC%89%EF%BC%9A%E4%BD%8D%E7%BD%AE%E6%97%A0%E5%85%B3%E4%BB%A3%E7%A0%81%EF%BC%88%E4%B8%AD%EF%BC%89%E2%80%94%E2%80%94%E7%9C%9F%E6%AD%A3%E7%90%86%E8%A7%A3%20PIC%20%E6%95%B0%E6%8D%AE%E5%BC%95%E7%94%A8%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%EF%BC%88Linux%20X86-64%20%E7%A4%BA%E4%BE%8B%EF%BC%89.html">计算机系统篇之链接(8):位置无关代码(中)——真正理解 PIC 数据引用的工作原理(Linux X86-64 示例)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%887%EF%BC%89%EF%BC%9A%E4%BD%8D%E7%BD%AE%E6%97%A0%E5%85%B3%E4%BB%A3%E7%A0%81%EF%BC%88%E4%B8%8A%EF%BC%89">计算机系统篇之链接(7):位置无关代码(上)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%886%EF%BC%89%EF%BC%9A%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5">计算机系统篇之链接(6):动态链接</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%885%EF%BC%89%EF%BC%9A%E9%87%8D%E5%AE%9A%E4%BD%8D">计算机系统篇之链接(5):静态链接(下)——重定位</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%884%EF%BC%89%EF%BC%9A%E7%AC%A6%E5%8F%B7%E8%A7%A3%E6%9E%90">计算机系统篇之链接(4):静态链接(中)——符号解析</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%883%EF%BC%89%EF%BC%9A%E9%9D%99%E6%80%81%E9%93%BE%E6%8E%A5%EF%BC%88%E4%B8%8A%EF%BC%89">计算机系统篇之链接(3):静态链接(上)</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%882%EF%BC%89%EF%BC%9A%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6">计算机系统篇之链接(2):目标文件</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%881%EF%BC%89%EF%BC%9Agcc%E6%88%96g++%E7%9A%84%E7%BC%96%E8%AF%91%E6%B5%81%E7%A8%8B">计算机系统篇之链接(1):gcc/g++的编译流程</a></p></li>
</ul>
<hr>
<h3 id="hspanidjumpspan-3"><span><span id="jump编译原理及实现">自制编译器</span></span></h3>
<ul>
<li><p><a href="https://csstormq.github.io/blog/%E8%A7%A3%E6%9E%90%E5%99%A8%E7%94%9F%E6%88%90%E5%99%A8%E4%B9%8B%20JavaCC%EF%BC%884%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8E%20JavaCC%20%E7%94%9F%E6%88%90%E6%8A%BD%E8%B1%A1%E8%AF%AD%E6%B3%95%E6%A0%91">解析器生成器之 JavaCC(4):如何基于 JavaCC 生成抽象语法树</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%A7%A3%E6%9E%90%E5%99%A8%E7%94%9F%E6%88%90%E5%99%A8%E4%B9%8B%20JavaCC%EF%BC%883%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8E%20JavaCC%20%E6%8F%8F%E8%BF%B0%E8%A7%A3%E6%9E%90%E5%99%A8">解析器生成器之 JavaCC(3):如何基于 JavaCC 描述解析器</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%A7%A3%E6%9E%90%E5%99%A8%E7%94%9F%E6%88%90%E5%99%A8%E4%B9%8B%20JavaCC%EF%BC%882%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8E%20JavaCC%20%E6%8F%8F%E8%BF%B0%E6%89%AB%E6%8F%8F%E5%99%A8">解析器生成器之 JavaCC(2):如何基于 JavaCC 描述扫描器</a></p></li>
<li><p><span id="jumpCB_2"><a href="https://csstormq.github.io/blog/%E8%A7%A3%E6%9E%90%E5%99%A8%E7%94%9F%E6%88%90%E5%99%A8%E4%B9%8B%20JavaCC%EF%BC%881%EF%BC%89%EF%BC%9A%20JavaCC%20%E5%87%86%E5%A4%87%E7%AF%87">解析器生成器之 JavaCC(1): JavaCC 准备篇</a></span></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%87%AA%E5%88%B6%E7%BC%96%E8%AF%91%E5%99%A8%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9AJavaCC%20%E5%BA%94%E7%94%A8%E6%A1%88%E4%BE%8B%E2%80%94%E2%80%94%E8%A7%A3%E6%9E%90%E6%AD%A3%E6%95%B4%E6%95%B0%E5%8A%A0%E6%B3%95%E8%BF%90%E7%AE%97">自制编译器篇(2):JavaCC 应用案例——解析正整数加法运算</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/%E8%87%AA%E5%88%B6%E7%BC%96%E8%AF%91%E5%99%A8%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9ACb%20%E7%BC%96%E8%AF%91%E5%99%A8%E7%9A%84%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8">自制编译器篇(1):Cb 编译器的安装和使用</a></p></li>
</ul>
<hr>
<h3 id="hspanidjumpllvmllvmspan"><span><span id="jumpLLVM编译器">LLVM 编译器</span></span></h3>
<ul>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%E5%90%8E%E7%AB%AF%E7%AF%87%EF%BC%886%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8E%20Pattern%20%E5%AE%9E%E7%8E%B0%E6%8C%87%E4%BB%A4%E9%80%89%E6%8B%A9">LLVM 之后端篇(6):如何基于 Pattern 实现指令选择</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%E5%90%8E%E7%AB%AF%E7%AF%87%EF%BC%885%EF%BC%89%EF%BC%9A%E7%90%86%E8%A7%A3%20SelectionDAG%20%E5%90%88%E6%B3%95%E5%8C%96">LLVM 之后端篇(5):理解 SelectionDAG 合法化</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%E5%90%8E%E7%AB%AF%E7%AF%87%EF%BC%884%EF%BC%89%EF%BC%9A%E7%90%86%E8%A7%A3%E6%8C%87%E4%BB%A4%E9%80%89%E6%8B%A9%E7%9A%84%20dump%20%E8%BE%93%E5%87%BA">LLVM 之后端篇(4):理解指令选择的 dump 输出</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%E5%90%8E%E7%AB%AF%E7%AF%87%EF%BC%883%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E6%B7%BB%E5%8A%A0%20MyRISCV%20%E7%9B%AE%E6%A0%87%E5%90%8E%E7%AB%AF%E7%9A%84%E7%AC%AC%E4%B8%80%E6%9D%A1%E6%8C%87%E4%BB%A4">LLVM 之后端篇(3):如何添加 MyRISCV 目标后端的第一条指令</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%E5%90%8E%E7%AB%AF%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E6%89%A9%E5%B1%95%20llc%20%E7%9A%84%E7%9B%AE%E6%A0%87%E5%90%8E%E7%AB%AF">LLVM 之后端篇(2):如何扩展 llc 的目标后端</a></p></li>
<li><p><span id="jumpLLVM_5"><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%E5%90%8E%E7%AB%AF%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%20TableGen">LLVM 之后端篇(1):零基础快速入门 TableGen</a></span></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%888%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E5%88%AB%E5%90%8D%E5%88%86%E6%9E%90%20Pass">LLVM 之 IR 篇(8):如何编写别名分析 Pass</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%887%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E5%86%85%E8%81%94%20Pass#jumpReferences">LLVM 之 IR 篇(7):如何编写内联 Pass</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%886%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E6%B6%88%E9%99%A4%E6%AD%BB%E4%BB%A3%E7%A0%81%20Pass">LLVM 之 IR 篇(6):如何编写消除死代码 Pass</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%885%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8E%E6%96%B0%20Pass%20%E6%A1%86%E6%9E%B6%E6%89%A9%E5%B1%95%20LLVM%20IR%20%E4%BC%98%E5%8C%96%E5%99%A8">LLVM 之 IR 篇(5):如何基于新 Pass 框架扩展 LLVM IR 优化器</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%884%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8E%E4%BC%A0%E7%BB%9F%20Pass%20%E6%A1%86%E6%9E%B6%E6%89%A9%E5%B1%95%20LLVM%20IR%20%E4%BC%98%E5%8C%96%E5%99%A8">LLVM 之 IR 篇(4):如何基于传统 Pass 框架扩展 LLVM IR 优化器</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%883%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20LLVM%20IR%20%E4%BC%98%E5%8C%96%E5%99%A8">LLVM 之 IR 篇(3):如何使用 LLVM IR 优化器</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E7%94%9F%E6%88%90%20LLVM%20IR%20%E7%9A%84%E5%B7%A5%E5%85%B7">LLVM 之 IR 篇(2):如何编写生成 LLVM IR 的工具</a></p></li>
<li><p><span id="jumpLLVM_4"><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20IR%20%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%20LLVM%20IR">LLVM 之 IR 篇(1):零基础快速入门 LLVM IR</a></span></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%AF%87%EF%BC%886%EF%BC%89%EF%BC%9Aclang::ento::CheckerContext%20%E7%B1%BB">LLVM 之 Clang 源码分析篇(6):clang::ento::CheckerContext 类</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%AF%87%EF%BC%885%EF%BC%89%EF%BC%9Aclang::ento::Checker%3C%20CHECK1,%20CHECKs%20%3E%20%E7%B1%BB%E6%A8%A1%E6%9D%BF">LLVM 之 Clang 源码分析篇(5):clang::ento::Checker< CHECK1, CHECKs > 类模板</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%AF%87%EF%BC%884%EF%BC%89%EF%BC%9Aclang::ento::CheckerManager%20%E7%B1%BB">LLVM 之 Clang 源码分析篇(4):clang::ento::CheckerManager 类</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%AF%87%EF%BC%883%EF%BC%89%EF%BC%9Aclang::ento::CheckerRegistry%20%E7%B1%BB">LLVM 之 Clang 源码分析篇(3):clang::ento::CheckerRegistry 类</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9Aclang::ento::CheckerRegistryData%20%E7%BB%93%E6%9E%84%E4%BD%93">LLVM 之 Clang 源码分析篇(2):clang::ento::CheckerRegistryData 结构体</a></p></li>
<li><p><span id="jumpLLVM_3"><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9Aclang::ento::CheckerInfo%20%E7%BB%93%E6%9E%84%E4%BD%93">LLVM 之 Clang 源码分析篇(1):clang::ento::CheckerInfo 结构体</a></span></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%888%EF%BC%89%EF%BC%9A%E7%A8%8B%E5%BA%8F%E7%BC%BA%E9%99%B7%E8%AF%8A%E6%96%AD%E2%80%94%E2%80%94%E9%9D%9E%E6%B3%95%E8%AF%BB%E5%86%99%E5%B7%B2%E9%87%8A%E6%94%BE%E7%9A%84%E5%86%85%E5%AD%98">LLVM 之 Clang 静态分析器篇(8):程序缺陷诊断——非法读写已释放的内存</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%887%EF%BC%89%EF%BC%9A%E7%A8%8B%E5%BA%8F%E7%BC%BA%E9%99%B7%E8%AF%8A%E6%96%AD%E2%80%94%E2%80%94%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2">LLVM 之 Clang 静态分析器篇(7):程序缺陷诊断——内存泄露</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%886%EF%BC%89%EF%BC%9A%E7%A8%8B%E5%BA%8F%E7%BC%BA%E9%99%B7%E8%AF%8A%E6%96%AD%E2%80%94%E2%80%94%E5%86%85%E5%AD%98%E9%87%8D%E5%A4%8D%E9%87%8A%E6%94%BE">LLVM 之 Clang 静态分析器篇(6):程序缺陷诊断——内存重复释放</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%885%EF%BC%89%EF%BC%9A%E7%A8%8B%E5%BA%8F%E7%BC%BA%E9%99%B7%E8%AF%8A%E6%96%AD%E2%80%94%E2%80%94fopen%20%E5%92%8C%20fclose%20API%20%E8%AF%AF%E7%94%A8">LLVM 之 Clang 静态分析器篇(5):程序缺陷诊断——fopen 和 fclose API 误用</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%884%EF%BC%89%EF%BC%9A%E7%A8%8B%E5%BA%8F%E7%BC%BA%E9%99%B7%E8%AF%8A%E6%96%AD%E2%80%94%E2%80%94%E9%99%A4%E9%9B%B6%E9%94%99%E8%AF%AF">LLVM 之 Clang 静态分析器篇(4):程序缺陷诊断——除零错误</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%883%EF%BC%89%EF%BC%9A%E6%A3%80%E6%9F%A5%E5%99%A8%E7%9A%84%E6%95%B4%E4%BD%93%E5%B7%A5%E4%BD%9C%E6%9C%BA%E5%88%B6">LLVM 之 Clang 静态分析器篇(3):检查器的整体工作机制</a></p></li>
<li><p><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E6%89%A9%E5%B1%95%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8">LLVM 之 Clang 静态分析器篇(2):如何扩展 Clang 静态分析器</a></p></li>
<li><p><span id="jumpLLVM_2"><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Clang%20%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E5%99%A8">LLVM 之 Clang 静态分析器篇(1):如何使用 Clang 静态分析器</a></span></p></li>
<li><p><span id="jumpLLVM_1"><a href="https://csstormq.github.io/blog/LLVM%20%E4%B9%8B%20Clang%20%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BB%8E%E6%BA%90%E7%A0%81%E6%9E%84%E5%BB%BA%E5%B9%B6%E5%AE%89%E8%A3%85%20Clang">LLVM 之 Clang 篇(1):如何从源码构建并安装 Clang</a></span></p></li>
</ul>
<hr>
<h3 id="hspanidjumptvmtvmspan"><span><span id="jumpTVM">TVM 编译器</span></span></h3>
<ul>
<li><p><a href="https://csstormq.github.io/blog/TVM%20%E7%AF%87%EF%BC%882%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20TVMC%20%E7%BC%96%E8%AF%91%E5%92%8C%E4%BC%98%E5%8C%96%E6%A8%A1%E5%9E%8B">TVM 篇(2):如何使用 TVMC 编译和优化模型</a></p></li>
<li><p><span id="jumpTVM_1"><a href="https://csstormq.github.io/blog/TVM%20%E7%AF%87%EF%BC%881%EF%BC%89%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BB%8E%E6%BA%90%E7%A0%81%E6%9E%84%E5%BB%BA%E5%B9%B6%E5%AE%89%E8%A3%85%20TVM">TVM 篇(1):如何从源码构建并安装 TVM</a></span></p></li>
</ul></div></div></body>
</html>