gpt4 book ai didi

c++ - STLport 崩溃(竞争条件,仅限 Darwin ?)

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:09 25 4
gpt4 key购买 nike

当我在 Darwin 上运行 STLport 时,我遇到了一个奇怪的崩溃。 (除了在 Mac 上没有在其他任何地方看到它,但是在 i686 和 PowerPC 上完全相同的东西崩溃了。)这就是它在 gdb 中的样子:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 21097]
0x000000010120f47c in stlp_std::__node_alloc_impl::_M_allocate ()

这可能是STLport中的一些设置,我注意到Mac.h和MacOSX.h在功能上似乎远远落后。我也知道它一定是某种类型的竞争条件,因为它不会通过调用此方法(隐式调用)发生。崩溃主要发生在我推送系统时,同时运行 10 个执行大量字符串处理的线程。

我提出的其他理论与编译器标志(配置脚本)和 g++ 4.2 错误有关(似乎 4.4.3 在 Mac 上还没有支持 Objective-C,我需要与之链接)。

求助!!! :)

编辑:我运行单元测试,它会做各种各样的事情。当我启动 10 个推送系统的线程时,就会出现这个问题;它总是归结为 std::string::append,最终归结为 _M_allocate。由于我什至无法获得导致问题的代码的下降转储,我认为我做错了什么。会不会是因为它试图在指令指针 0x000...000 处执行?动态库是否在 Windows 中构建为带有跳转表的 DLL?会不会是这样的跳转表由于某种原因被覆盖了?这可能可以解释这种行为。 (代码量很大,如果我没有其他想法,我会在这里发布一个最小的崩溃示例。)

最佳答案

嗯.. STLPort 使用分配器获取平台内存并在需要时将其内部池化到数据结构中。

只需检查崩溃何时发生,分配给执行线程的堆就足以让分配发生。即使分配失败,也可能发生此崩溃。

我不确定您正在使用的当前配置中的 STL 分配器的粒度。检查 STL_config.h。

关于c++ - STLport 崩溃(竞争条件,仅限 Darwin ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com