Ignore:
Timestamp:
Oct 21, 2007, 8:01:08 PM (17 years ago)
Author:
dai
Message:

api_commctrl.sbp、api_winsock2.sbpを標準ライブラリ内で取り込むようにした。
gc.sbp内のコードにコメントをつけた

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Include/system/gc.sbp

    r330 r360  
    1 /*
    2     このファイルでは、ABのガベージコレクションの実装を行います。
     1/*!
     2    @brief  このファイルでは、ABのガベージコレクションの実装を行います。
    33*/
    44
     
    2525Class _System_CGarbageCollection
    2626
    27     ppPtr As *VoidPtr
    28     pSize As *SIZE_T
    29     pdwFlags As *DWord
    30     n As Long
     27    ppPtr As *VoidPtr       ' 管理するメモリオブジェクトのポインタリスト
     28    pSize As *SIZE_T        ' 管理するメモリオブジェクトのサイズリスト
     29    pdwFlags As *DWord      ' 管理するメモリオブジェクトの属性リスト
     30    n As Long               ' 管理するメモリオブジェクトの個数
     31
     32    ppEdenMemoryObjectPtrs As *VoidPtr
     33    pEdenMemoryObjectSizes As *SIZE_T
     34    pdwEdenMemoryObjectFlags As *DWord
     35    numOfEden
    3136
    3237    iAllSize As SIZE_T
    3338
    34     isSweeping As Boolean
    35 
     39    isSweeping As Boolean   ' スウィープ中かどうか
     40
     41    ' クリティカルセクション
    3642    CriticalSection As CRITICAL_SECTION
    3743
     
    4046    limitMemoryObjectNum As Long    ' メモリオブジェクトの個数単位
    4147
    42     isFinish As Boolean
     48    isFinish As Boolean     ' GC管理が終了したかどうか
    4349
    4450
     
    6874Public
    6975
     76    /*!
     77    @brief  環境変数にGCを登録する
     78    @author Daisuke Yamamoto
     79    @date   2007/10/21
     80    */
    7081    Static Sub Initialize()
    7182        Dim temporary[255] As Char
     
    8495    End Sub
    8596
     97    /*!
     98    @brief  メモリサイズの上限を指定する
     99    @param  limitMemorySize メモリサイズの上限(単位はバイト)
     100            limitMemoryObjectNum メモリ個数の上限
     101    @author Daisuke Yamamoto
     102    @date   2007/10/21
     103    */
     104    Sub SetLimit( limitMemorySize As LONG_PTR, limitMemoryObjectNum As Long )
     105        This.limitMemorySize = limitMemorySize
     106        This.limitMemoryObjectNum = limitMemoryObjectNum
     107    End Sub
     108
     109    /*!
     110    @brief  初期化
     111    @author Daisuke Yamamoto
     112    @date   2007/10/21
     113    */
    86114    Sub Begin()
    87115        If ppPtr Then Exit Sub
     
    131159
    132160    End Sub
     161
     162    /*!
     163    @brief  終了処理
     164    @author Daisuke Yamamoto
     165    @date   2007/10/21
     166    */
    133167    Sub Finish()
    134168        If ppPtr=0 Then Exit Sub
     
    167201    End Sub
    168202
     203    /*!
     204    @brief  メモリオブジェクトを追加する
     205    @param  new_ptr メモリオブジェクトへのポインタ
     206            size メモリオブジェクトのサイズ
     207            flags メモリオブジェクトの属性
     208    @author Daisuke Yamamoto
     209    @date   2007/10/21
     210    */
    169211    Sub add(new_ptr As VoidPtr, size As SIZE_T, flags As DWord)
    170212        iAllSize+=size
     
    179221            pdwFlags=HeapReAlloc(_System_hProcessHeap,0,pdwFlags,(n+1)*SizeOf(DWord))
    180222            pdwFlags[n]=flags
     223
     224            n++
    181225        LeaveCriticalSection(CriticalSection)
    182226
     
    187231        End If
    188232        */
    189 
    190         n++
    191     End Sub
    192 
    193 
     233    End Sub
     234
     235
     236    /*!
     237    @brief  メモリオブジェクトを確保する
     238    @param  size メモリオブジェクトのサイズ
     239            flags メモリオブジェクトの属性
     240    @author Daisuke Yamamoto
     241    @date   2007/10/21
     242    */
    194243    Function __malloc(size As SIZE_T,flags As Byte) As VoidPtr
    195244'       EnterCriticalSection(CriticalSection)
     
    208257    End Function
    209258
     259    /*!
     260    @brief  メモリオブジェクトを再確保する
     261    @param  lpMem メモリオブジェクトへのポインタ
     262            size メモリオブジェクトのサイズ
     263            flags メモリオブジェクトの属性
     264    @author Daisuke Yamamoto
     265    @date   2007/10/21
     266    */
    210267    Function __realloc(lpMem As VoidPtr, size As SIZE_T) As VoidPtr
    211268        EnterCriticalSection(CriticalSection)
     
    226283    End Function
    227284
     285    /*!
     286    @brief  メモリオブジェクトを解放する
     287    @param  lpMem メモリオブジェクトへのポインタ
     288            isSweeping スウィープ中にこのメソッドが呼ばれるときはTrue、それ以外はFalse
     289    @author Daisuke Yamamoto
     290    @date   2007/10/21
     291    */
    228292    Sub __free_ex(lpMem As VoidPtr, isSweeping As Boolean)
    229293        EnterCriticalSection(CriticalSection)
     
    247311    End Sub
    248312
     313    /*!
     314    @brief  メモリオブジェクトを解放する
     315    @param  lpMem メモリオブジェクトへのポインタ
     316    @author Daisuke Yamamoto
     317    @date   2007/10/21
     318    */
    249319    Sub __free(lpMem As VoidPtr)
    250320        __free_ex( lpMem, False )
    251321    End Sub
    252322
     323    /*!
     324    @brief  スウィープする
     325    @author Daisuke Yamamoto
     326    @date   2007/10/21
     327    */
    253328    Sub sweep()
    254329        If isSweeping <> False or (iAllSize<limitMemorySize and n<limitMemoryObjectNum) Then
     
    271346    End Function
    272347
    273     ' 生存検知
     348    /*!
     349    @brief  メモリオブジェクトの生存検地
     350    @param  pSample メモリオブジェクトへのポインタ
     351    @author Daisuke Yamamoto
     352    @date   2007/10/21
     353    */
    274354    Function HitTest(pSample As VoidPtr) As Long
    275355        Dim i As Long
     
    282362    End Function
    283363
    284     ' オブジェクトのスキャン
     364    /*!
     365    @brief  オブジェクトのスキャン
     366    @param  pObject オブジェクトへのポインタ
     367            pbMark マークリスト
     368    @author Daisuke Yamamoto
     369    @date   2007/10/21
     370    */
    285371    Function ScanObject(pObject As *Object, pbMark As *Byte) As Boolean
    286372        Dim classTypeInfo = Nothing As ActiveBasic.Core._System_TypeForClass
     
    305391    End Function
    306392
    307     ' 指定領域のスキャン
     393    /*!
     394    @brief  メモリオブジェクトのスキャン
     395    @param  pStartPtr メモリオブジェクトへのポインタ
     396            maxNum スキャンするメモリオブジェクトの個数
     397            pbMark マークリスト
     398    @author Daisuke Yamamoto
     399    @date   2007/10/21
     400    */
    308401    Sub Scan(pStartPtr As *LONG_PTR, maxNum As Long, pbMark As *Byte)
    309402        Dim i As Long, index As Long
     
    337430    End Sub
    338431
    339     ' ローカル領域をルートに指定してスキャン
     432    /*!
     433    @brief  グローバル領域をルートに指定してスキャン
     434    @param  pbMark マークリスト
     435    @author Daisuke Yamamoto
     436    @date   2007/10/21
     437    */
     438    Sub GlobalScan( pbMark As *Byte )
     439        Dim i As Long
     440        For i = 0 To ELM( globalRootNum )
     441            Scan( pGlobalRoots[i].ptr, pGlobalRoots[i].count, pbMark )
     442        Next
     443    End Sub
     444
     445    /*!
     446    @brief  ローカル領域をルートに指定してスキャン
     447    @param  pbMark マークリスト
     448    @author Daisuke Yamamoto
     449    @date   2007/10/21
     450    */
    340451    Sub LocalScan( pbMark As *Byte )
    341452        Dim Context As CONTEXT
     
    377488    End Sub
    378489
     490    /*!
     491    @brief  生存していないメモリオブジェクトを解放する
     492    @param  pbMark マークリスト
     493    @author Daisuke Yamamoto
     494    @date   2007/10/21
     495    */
    379496    Sub DeleteGarbageMemories( pbMark As *Byte )
    380497
     
    424541    End Sub
    425542
     543    /*!
     544    @brief  GCが管理するすべてのメモリオブジェクトを解放する
     545    @author Daisuke Yamamoto
     546    @date   2007/10/21
     547    */
    426548    Sub DeleteAllGarbageMemories()
    427549        DeleteGarbageMemories( NULL )
    428550    End Sub
    429551
     552    /*!
     553    @brief  コンパクション
     554    @author Daisuke Yamamoto
     555    @date   2007/10/21
     556    */
    430557    Sub Compaction()
    431558        Dim i As Long, i2 = 0 As Long
     
    442569    End Sub
    443570
    444     ' スウィープ(新規スレッドで呼び出し)
     571    /*!
     572    @brief  スウィープ(新規スレッドで呼び出す必要あり)
     573    @author Daisuke Yamamoto
     574    @date   2007/10/21
     575    */
    445576    Function SweepOnOtherThread() As Long
    446577        EnterCriticalSection(CriticalSection)
     
    464595
    465596        ' グローバル領域をルートに指定してスキャン
    466         Dim i As Long
    467         For i = 0 To ELM( globalRootNum )
    468             Scan( pGlobalRoots[i].ptr, pGlobalRoots[i].count, pbMark )
    469         Next
     597        GlobalScan( pbMark )
    470598
    471599        ' ローカル領域をルートに指定してスキャン
     
    516644    End Function
    517645
    518     ' 未解放のメモリオブジェクトをトレース
     646    /*!
     647    @brief  未解放のメモリオブジェクトをデバッグ出力する
     648    @author Daisuke Yamamoto
     649    @date   2007/10/21
     650    */
    519651    Sub DumpMemoryLeaks()
    520652        Dim isLeak = False
Note: See TracChangeset for help on using the changeset viewer.