c – 修改“__cxa_allocate_exception”,表示没有使用malloc
我在一个安全的嵌入式系统中工作,我想稍微修改一下异常处理. __cxa_allocate_exception正在使用malloc()为异常对象分配内存. malloc / new在安全应用程序中是不允许的,所以我必须重写它.
现在我的问题是:在这种情况下有没有办法避免malloc? 一些替代方案是: >使用静态缓冲区,这将导致多任务/多核应用程序出现问题,所以我不能这样做. 解决方法
看看:
gcc-6.3.0 / libstdc -v3 / libsupc /eh_alloc.cc(或更高版本).指定了池(内存)类,并在匿名命名空间中将其实例化为emergency_pool.您可以调整EMERGENCY宏值,或者完全替换实现 – 只要您考虑使用池中的线程安全性.
如果您事先了解调用堆栈深度,则可以修复池缓冲区的值,该值始终足够.同样,您可能需要同步原语以获得线程安全性. 如果这还不够,__cxa_allocate_exception会在分配失败时调用std :: terminate.这里是 对于线程安全性,请使用与池相同的__gnu_cxx :: __互斥对象,以及__gnu_cxx :: __ scoped_lock惯用法.这样你就不依赖于libsupc不依赖的任何东西,比如标准库atomics或std :: mutex,或者std :: lock_guard – 即创建对libstdc的依赖. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |