这个问题是question.的后续问题。
如何实现我的应用程序和运行时包使用相同的内存管理器?我认为默认情况是这样的,但是由于我遇到奇怪的访问冲突和无效的指针异常,我在进入运行时包和运行时包之前插入了对GetMemoryManagerState的调用,返回的状态似乎表明包和应用程序使用单独的内存管理器。
在调用运行时包中的方法之前,有61个已分配的中介块,调用之后(在包中被调用的方法开始时)有0个已分配的中介块。
你对此有什么解释吗?要让包和应用程序共享内存管理器,我需要做什么?在使用FastMM时,还有更复杂的问题吗?
编辑 BTW,有没有比比较内存管理器状态更好的方法来检查是否使用相同的内存管理器?TMemoryManager原来是一个记录,所以我不能比较嵌入。
发布于 2010-02-23 09:49:58
由于ldsandon和Rob Kennedy,我发现有必要使用运行时包(至少对于RTL),以便应用程序和包共享内存管理器。
启用“使用运行时包”并在包列表中添加"rtl“解决了问题。感谢你们的帮助。
发布于 2010-02-22 12:46:47
包使用与主程序相同的RTL状态。这是包定义的一部分。
内存管理器包括在内。
顺便说一句,我关于包裹的笔记在这里:http://wiki.freepascal.org/packages
目前,FPC仍然离此很远(主要是因为需要通过外部链接器在众多OSes和体系结构上实现这一点)。此外,由于FPC版本数量较多,因此我怀疑它不会像许多人所认为的那样有用(我不期望Lazarus组件以二进制的形式分发,只相当于BPLs/..dcp组合)。
https://stackoverflow.com/questions/2310273
复制相似问题