1

重大な問題が発生する前に、スクリプトに重大なメモリ リークがあるかどうかを調べることは重要です。残念ながら、現在のスタック/ヒープ サイズまたは「文字列テーブル」サイズを測定する方法を見つけることができませんでした ( http://www.smartdxl.com/content/?p=481を参照)。誰でも助けることができますか?

関連する質問: DXL メモリと CPU 使用率の予測

4

2 に答える 2

1

最大のメモリ「リーク」は、使用されなくなったオープン モジュールです。もちろん、それらを閉じる必要があります。

次に、新しい文字列が生成されるたびに文字列テーブルにエントリが作成されるため、新しい文字列の生成を最小限に抑える必要があります。Mathias Mamsch による優れた論文がここにあります

最後に、作成/削除メソッドを持つデータ型は、削除されていない場合、メモリを消費する可能性があります。リリースされていないインスタンスを見つけるには、Mathias Mamsch によって最初に作成されたいくつかのメモリ関数を使用します。彼の投稿に戻るリンクは機能しなくなりましたが、私が使用している機能は次のとおりです。

//< Memory Functions [Memory.inc]
/*
Code adapted from forum post by Mathias Mamsch:
https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014830975
*/

int *::+(int *ptr, int ofs)
{
    int *rtn = ptr
    rtn += ofs
    return(rtn)
}

int *::@(int *ptr, int ofs)
{
    int adr = *(ptr + ofs)
    int *rtn = addr_(adr)
    return(rtn)
}

int *mbn(int *ptr)
{
    return(ptr @ 0x74)
}

int *nnn(int *ptr)
{
    return(ptr @ 8)
}

int *ccp()
{
    DB db = create("")
    int *ptr = addr_(db)
    int *rtn = ptr @ 48
    destroy(db)
    return(rtn)
}

int allocatedObjects()
{
    int cnt = 0
    int *mb = mbn(ccp())
    while(!null mb) { mb = nnn(mb) ; cnt++ }
    return(cnt)
}

関数名と変数名を投稿された元のコードから変更したことは間違いないので、彼の元のコードに出くわした場合は注意してください。そして、ハードコードされた数字について私に尋ねないでください... マティアスは投稿でそれらを説明しましたが、私はその説明を思い出せません.

コードの使用方法は次のとおりです。

//< Test of Memory.inc
/*
*/
pragma encoding, "UTF-8"

#include <stdlib/Memory.inc>

pragma runLim, 0

int numallobj = allocatedObjects()
print numallobj "\n"

Skip skp = null Skip

numallobj = allocatedObjects()
print numallobj "\n"

skp = create()

numallobj = allocatedObjects()
print numallobj "\n"

delete(skp)

numallobj = allocatedObjects()
print numallobj "\n"

/*
Output should be:
0
0
1
0
*/
于 2015-06-03T09:08:40.680 に答える
0

質問の「文字列テーブル」の部分の解決策を見つけました。Mathias Mamsch は、関数を定義するファイル「stringTable.inc」をhttps://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014886977printStringTable()で提供しています。どうやら、テーブル サイズに関する情報を出力し、文字列テーブルのバイトサイズの概算を提供するために簡単にパッチを適用できます。

于 2015-06-03T09:04:38.293 に答える