문제

사용 C ++, lua5.1, Luabind 0.7

LUA 코드 :

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

C ++ 코드 :

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

결과: LUA에는 여전히 8MB 할당 메모리가 있습니다. 쓰레기 수집은 해당 테이블 개체를 무시합니다. 어디서나 참조가 있습니까? 하지만 어디? 이 테이블은 프로그램 종료 ( "lua_close"함수가 호출 될 때만)에만 거래됩니다. 이 문제를 해결하는 방법?

고맙습니다.

도움이 되었습니까?

해결책

사용하는 코드가 정확히 게시 된 경우 LUA 스택에 여전히 참조가 있다고 말합니다. luabind :: 객체 생성과 lua_gc 호출 사이에 lua_pop (l, 1)을 삽입하십시오.

참고로, Luabind의 현재 안정적인 방출은 0.8.1이며 0.9-RC도 있습니다. 현재 버전을 사용하는 경우 더 많은 답변을 얻을 수 있습니다 (여기 및 Luabind-Users 그룹에서).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top