【发布时间】:2015-05-24 16:24:06
【问题描述】:
我使用 FLTK 创建了一个多平台应用程序,它使用 boost 文本序列化功能来实现可移植的跨平台文档保存功能。 (如果这是个坏主意:恐怕为时已晚!)。
这在 Mac 和我编译它的 Windows 机器上运行良好。然而,我在较低规格的 Windows 机器上使用了编译后的二进制文件,虽然它在所有其他功能上运行良好,但在打开保存文件时(即反序列化时)程序会崩溃。
查看配置较低的 Windows 机器上的任务管理器和活动监视器中的内存使用情况,我注意到了这种不同的行为
Windows:内存使用是问题所在,它一直在攀升,直到程序使用大约 800Mb 的 RAM,然后程序崩溃
Mac:在反序列化完全相同的文件时,相同编译代码的内存使用量最高为 40Mb。
Windows 二进制文件是 Win32(32 位),我已经验证了在 64 位和 32 位 Mac 版本中相同的正常工作行为。所有代码都使用静态库链接(除非不可能,例如 Mac OS 中的 CRT)。
为什么要使用 完全相同的代码 使用自包含在仅头文件中的 boost 功能会导致 Windows 机器上这种任性的内存使用(它在更高规格的机器上运行良好,尽管我没有跟踪内存使用)而所有其他程序功能都可以正常工作?
我能做些什么呢?
谢谢。
【问题讨论】:
-
为了缩小问题的范围,您是否尝试过一个简单的控制台程序来测试类似于您在 GUI 版本中编写的 boost 序列化。它还会泄漏内存吗?
标签: c++ serialization boost fltk