سؤال

باستخدام C++, lua5.1, luabind 0.7

لوا كود:

-- allocates near 8Mb of memory
function fff()
    local t = {}
    for i = 1, 300000 do
        table.insert(t, i)
    end
    return t
end

C++ code:

{
    luaL_dostring(lua_state, "return fff()");
    luabind::object obj(luabind::from_stack(ls, -1));
}
lua_gc(l_, LUA_GCCOLLECT, 0); // collect garbage

نتيجة:لوا لا تزال لديها 8Mb الذاكرة المخصصة.جمع القمامة يتجاهل هذا الجدول الكائن.وقد المراجع في أي مكان ؟ ولكن أين ؟ هذا الجدول إلغاء تخصيص فقط عند الخروج من البرنامج (عند "lua_close" وظيفة تسمى).كيفية حل هذه المشكلة ؟

شكرا لك.

هل كانت مفيدة؟

المحلول

إذا كان رمز تستخدمه بالضبط كما نشرت أقول لا يزال هناك إشارة في لوا المكدس.محاولة إدراج lua_pop(l, 1) بين luabind::إنشاء كائن و lua_gc الاتصال.

على الجانب علما الحالي إصدار ثابت من luabind هو 0.8.1 هناك 0.9-rc أيضا ؛ قد تحصل على أكثر الإجابات إذا كنت تستخدم بعض النسخة الحالية (سواء هنا أو من luabind-users)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top