我正在一个安全的嵌入式系统中工作,并且我想修改一下异常处理。 __cxa_allocate_exception
正在使用malloc()
为异常对象分配内存。 malloc
/new
在安全应用程序中是不允许的,所以我必须重写它。修改不使用malloc的“__cxa_allocate_exception”
现在我的问题:有没有办法避免malloc在这种情况下?
一些替代方案是:
- 使用静态缓冲区,这将导致在多任务/多核心应用程序的问题,所以我不能做到这一点。
- 在堆上写入也会导致一些麻烦,因为堆可能已满(内存不足不会工作)。
- 最后,也许我可以分配(例如)16kb的任务堆栈空间,每个异常对象将有一个1kb的常量大小。这样,我可以处理多达16个例外。如果它有任何意义或者甚至是可能的,我对这个堆栈的理解可悲的是很低,要评估它。
线程局部变量是一个可行的解决方案吗? – arrowd
你真的*需要*例外吗?在小型嵌入式系统中,异常通常是一个坏主意。更不用说在C++中抛出异常通常非常昂贵,所以应该只用于真正的异常事件。 –
预先保留内存会增加内存不足的风险,而不是减少内存。 –