⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9_2_3 多任务下的垃圾收集 - 《多任务下的数据结构与算法》 - 免费试读 - book_csdn_net.htm

📁 主要介绍了多任务下面的一些数据结构和算法,比如树和图的一些遍历
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Lock(g_lock)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
HashTable_Delete(g_pMTable, pFree, HashInt, IntCompare, NULL)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Unlock(g_lock)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
free(pFree)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US>/**&nbsp;&nbsp; 
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">支持多任务的垃圾收集函数,遍历哈希表,将所有引用计数为</SPAN><SPAN 
lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 华康简宋">的内存释放</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @return&nbsp; 
void</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">无</SPAN><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><STRONG><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">void MGC_Collect()</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void 
*p</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Lock(g_lock)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
HashTable_EnumBegin(g_pMTable)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ( (p = 
HashTable_EnumNext(g_pMTable)) != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
INT *pRef = (INT *)((char *)p</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">-</SPAN><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">INT_LEN)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if ( *pRef == 0 )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
HashTable_Delete(g_pMTable, p, HashInt, IntCompare, NULL)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
MGC_Free(p)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Unlock(g_lock)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 8pt; LINE-HEIGHT: 14.5pt"><SPAN 
lang=EN-US style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 16.5pt"><SPAN 
style="FONT-FAMILY: 华康简宋">注意</SPAN><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN 
style="FONT-FAMILY: 华康简宋">上面定义全局哈希表对象时使用了另外一个</SPAN><SPAN 
lang=EN-US>g_pMTable</SPAN><SPAN 
style="FONT-FAMILY: 华康简宋">变量,主要是有别于支持单任务的哈希表对象,便于采取不同的策略进行管理。</SPAN></P>
<H4 style="MARGIN-LEFT: 0cm; LINE-HEIGHT: 16.5pt"><SPAN lang=EN-US>3. 
</SPAN><SPAN style="FONT-FAMILY: 黑体">使用单独任务进行垃圾收集</SPAN></H4>
<P class=MsoNormal style="LINE-HEIGHT: 16.5pt"><SPAN 
style="FONT-FAMILY: 华康简宋">实现多任务支持之后,如何进行垃圾收集呢?可以看出在上面实现的</SPAN><SPAN 
lang=EN-US>MGC_Collect()</SPAN><SPAN 
style="FONT-FAMILY: 华康简宋">函数中,只是简单地加锁,然后收集,再解锁。这样做的缺点是当分配的内存数量比较多时,需要耗费大量的时间进行收集,并且在收集的过程中其他的内存操作全部都会被挂起,直到收集完成解锁后,其他的内存操作才能继续,这就是目前实际应用中使用较多的收集方法。本书前面已经介绍了多任务下如何遍历的问题,所以这里要利用本书的多任务算法来实现更好的垃圾收集功能,使得在进行垃圾收集时不影响其他的内存操作,使得应用程序继续运行,让用户感觉不到垃圾收集在运行。</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 16.2pt"><SPAN 
style="FONT-FAMILY: 华康简宋">要实现收集时不影响内存操作,必须使用支持多任务的哈希表。考虑到程序效率,就不再像多任务链表那样单独写一个多任务哈希表模块,若写成单独模块,多任务哈希表自己得有一个锁,加上引用计数使用的锁</SPAN><SPAN 
lang=EN-US>g_lock</SPAN><SPAN 
style="FONT-FAMILY: 华康简宋">总共有两个锁,需要进行两次加锁解锁操作。而锁的操作相对于内存读写操作是非常耗费时间的,所以还是让哈希表共用</SPAN><SPAN 
lang=EN-US>g_lock</SPAN><SPAN 
style="FONT-FAMILY: 华康简宋">锁变量。另外还得发挥多任务的优势,特别是在使用多核</SPAN><SPAN 
lang=EN-US>CPU</SPAN><SPAN 
style="FONT-FAMILY: 华康简宋">时,更应该发挥多任务的优势,尤其需要将垃圾回收放到一个单独的任务里运行。下面我们就来实现用单独的垃圾收集任务收集垃圾。</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 16.2pt"><SPAN 
style="FONT-FAMILY: 华康简宋">要支持多任务,首先必须定义一个多任务变量如下。</SPAN></P>
<P class=MsoNormal style="MARGIN: 8pt 0cm; LINE-HEIGHT: 14pt"><STRONG><SPAN 
lang=EN-US style="FONT-SIZE: 9pt">MTASK g_pMTask</SPAN></STRONG><STRONG><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></STRONG></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 华康简宋">还得在</SPAN><SPAN 
lang=EN-US>MGC_Init()</SPAN><SPAN style="FONT-FAMILY: 华康简宋">函数里创建</SPAN><SPAN 
lang=EN-US>MTASK</SPAN><SPAN style="FONT-FAMILY: 华康简宋">对象,修改后的编码如下。</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US>/**&nbsp;&nbsp; 
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">多任务下的垃圾内存收集算法的初始化函数</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @param&nbsp; 
INT nBucketCount</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">哈希表的</SPAN><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">bucket</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">的数量</SPAN><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @return&nbsp; 
INT</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">成功返回</SPAN><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">CAPI_SUCCESS</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">失败返回</SPAN><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">CAPI_FAILED</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><STRONG><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">INT MGC_Init(INT nBucketCount)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_lock = 
LockCreate()</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( g_lock != 
NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
g_pMTable = HashTable_Create(nBucketCount)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if ( g_pMTable != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
g_pMTask = MTask_Create()</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if ( g_pMTask != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return CAPI_SUCCESS</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
else</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
HashTable_Destroy(g_pMTable, NULL)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
LockClose(g_lock)</SPAN><SPAN 
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
else</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US 
style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -