我是C++开发人员并使用Visual Studio 2008.如何减少*.obj文件大小?我已经读过为什么我的visual studio .obj文件与输出.exe文件相比大小很大?但没有找到答案.
当我将项目构建到静态库时,所有*.obj文件的总大小为513Mb,结果lib为534Mb.每个obj文件是1-13Mb.调试exe文件是11Mb.链接时代码生成(/ Gm)已关闭.
提前致谢.
如何遍历luabind类(在lua或c ++中)?
class 'A'
function A:__init()
-- Does not work
-- self is userdata, not a table
for i, v in pairs(self) do
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢
对象有问题,不再需要但仍有引用.结果:由于未收集对象,分配的内存大小不断增加.
如何解决这类问题?有没有办法找到只有一个引用的对象,或者生命周期超过某个值的对象?或任何其他解决方案?
使用Lua 5.1和C++与luabind.
谢谢.
使用C++,lua 5.1,luabind 0.7-0.81
尝试使用parent创建lua类并将其存储在luabind :: object中.
LUA
class 'TestClassParent'
function TestClassParent:__init()
print('parent init\n')
end
function TestClassParent:__finalize()
print('parent finalize\n')
end
class 'TestClass' (TestClassParent)
function TestClass:__init()
print('init\n')
TestClassParent.__init(self)
end
function TestClass:__finalize()
print('finalize\n')
end
Run Code Online (Sandbox Code Playgroud)
C++
{
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass");
}
printf("before GC\n");
lua_gc(lua, LUA_GCCOLLECT, 0);
printf("after GC\n");
Run Code Online (Sandbox Code Playgroud)
输出:
GC
后GC 之前的
init
父init
结果: obj被销毁后,'TestClass'实例在垃圾收集周期后仍然存活(未调用__finalize方法且未释放内存).它只在程序退出时销毁.
Moresome如果我使用类无父,垃圾收集正确.
如果我尝试使用采用策略(获取创建对象的所有权)
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass")[luabind::adopt(luabind::result)];
Run Code Online (Sandbox Code Playgroud)
我明白了: