低内存会导致本机代码中的SEG故障
Can low memory cause seg faults in native code?
我在本机代码中有一组崩溃,这些崩溃很少见,但会持续地侵蚀segv_maperr或segv_accerr。这些崩溃几乎总是由不含RAM的Crashlytics报告(通常为1-5%)。"正常"崩溃(即我已经调试的崩溃)没有免费的模式。
这些崩溃是否可能是由低记忆条件引起的?这样的机制是什么?有什么办法可以判断这些是否与内存相关的崩溃或编程错误(错误地使用指针等)?在许多情况下,崩溃发生在我无法调试的库中,我无法在设备上复制崩溃。
这是从开发人员控制台中抽出的其中一些崩溃,因为在这些情况下,它提供的详细信息比crashlytics提供了更多的细节:
********** Crash dump: **********
Build fingerprint: 'htc/a32eul_metropcs_us/htc_a32eul:5.1/LMY47O/637541.3:user/release-keys'
pid: 10902, tid: 10989, name: .xxx.xxxx >>> com.xxx.xxxxx <<<
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x97f78000
Stack frame #00 pc 0004cd80 /data/app/xxx.xxx.xxxxx-1/lib/arm/libxxx.so: Routine xxxxxMixerInterleavedFloatOutput at libgcc2.c:?
********** Crash dump: **********
Build fingerprint: 'Xiaomi/land/land:6.0.1/MMB29M/V8.1.1.0.MALMIDI:user/release-keys'
pid: 2661, tid: 2746, name: .xxx.xxxx >>> com.xxx.xxxx <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Stack frame #00 pc 00016954 /system/lib/libc.so (__memcpy_base+36)
Stack frame #01 pc 0000b14c /data/app/com.xxx.xxxx-2/lib/arm/libswresample-2.so: Routine ??
??:0
有两种一般可能性:
-
本身的低记忆条件本身不会以某种方式触发运行应用程序中的segfault。可能发生的事情是,当应用程序要求将其他内存分配给它时,内存分配请求就会失败。这是一个明确定义的内存条件。据记录,相关的系统调用可能会在分配内存时失败。但是经常发生的是,该应用程序未正确编码以检查失败的内存分配请求,因此它们崩溃了。在那种情况下,低存储条件是为了应用程序segfault的原因,这是一个应用程序错误。
-
Linux内核超越了可用的内存。结果,当所有可用的RAM都用尽时,内核可能别无选择,只能选择要杀死的过程。
但是,在OOM杀手踢的情况下,选定的受害者被SIGKILL
终止。SEGFAULT
指示应用程序错误。
相关文章:
- C++函数过载会导致 SEG 故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- C ;使用lambdas在类中有条件地扩展功能(MWE的SEG故障)
- lambda回调中Android Cocos2D-X应用程序上的SEG故障
- 访问索引指向向量元素时的seg故障 - 做错了什么
- 如何修复strlen seg故障
- 将内存分配给指针数组时SEG故障
- MPI Hello World上的Valgrind SEG故障
- 迭代器越来越多,并导致SEG故障
- 复制CORBA ::任何包含字符串的corba程序SEG故障
- 当有1个以上的对象时,动态字符串类断裂与SEG故障
- C AVX2:访问数组数组中的地址时SEG故障
- SEG故障取决于指针分配的顺序
- 为什么C 线引起SEG故障
- std::map 的比较器函数中的 SEG 故障/未定义行为
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- Taglib设置专辑图片,但给出了SEG故障
- 低内存会导致本机代码中的SEG故障
- STD上的SEG故障::设置整数插入
- SEG故障仅发生每次跑步