[解決済み] Luaスクリプトのメモリ使用量を制限する?
2022-02-14 01:20:08
質問
Luaスクリプトのメモリ使用量を制限する方法はないと何度も言われ、Luaスクリプトが関数やテーブルを作成できないようにする人々もいます。しかし、lua_newstateではカスタムアロケータを渡すことができるので、それを使ってメモリ消費を制限することはできないのでしょうか?最悪の場合、アリーナベースのアロケータを使用し、断片化によって使用される可能性のあるメモリ量にさえ厳しい制限をかけることができるかもしれません。
何か見落としているのでしょうか?
解決方法は?
static void *l_alloc_restricted (void *ud, void *ptr, size_t osize, size_t nsize)
{
const int MAX_SIZE = 1024; /* set limit here */
int *used = (int *)ud;
if(ptr == NULL) {
/*
* <http://www.lua.org/manual/5.2/manual.html#lua_Alloc>:
* When ptr is NULL, osize encodes the kind of object that Lua is
* allocating.
*
* Since we don’t care about that, just mark it as 0.
*/
osize = 0;
}
if (nsize == 0)
{
free(ptr);
*used -= osize; /* substract old size from used memory */
return NULL;
}
else
{
if (*used + (nsize - osize) > MAX_SIZE) /* too much memory in use */
return NULL;
ptr = realloc(ptr, nsize);
if (ptr) /* reallocation successful? */
*used += (nsize - osize);
return ptr;
}
}
Luaに自分のアロケーターを使わせるためには
int *ud = malloc(sizeof(int)); *ud = 0;
lua_State *L = lua_State *lua_newstate (l_alloc_restricted, ud);
注:ソースのテストはしていませんが、動作するはずです。
関連
-
[解決済み】<eof>は'end'の近くで期待される。
-
[解決済み] Lua: グローバルな 'mapfinishes' (nil 値) に対して演算を実行しようとした。
-
[解決済み] Luaにおける演算子~=の意味とは?
-
[解決済み] .luaスクリプトを実行するにはどうしたらいいですか?[クローズド]。
-
このエラーは、LUA が nil 値(グローバル 'loadstring')を呼び出そうとしたときに発生しました。
-
lua loadlib 関数がグローバルな 'loadlib' (nil 値) を呼び出そうとする
-
[解決済み] excavate 5」のようなコンピュタークラフトプログラムを実行するには?
-
[解決済み] Luaでファイルからデータを読み込む方法
-
[解決済み】Luaの文字列をintに変換する
-
[解決済み】Luaの.と:の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン