如何克服C对嵌入式系统缺乏工具支持?

前端之家收集整理的这篇文章主要介绍了如何克服C对嵌入式系统缺乏工具支持?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@问题不在于 Linux内核.这不是C对C的辩论.

我做了一个研究,在我看来,对于嵌入式系统的异常处理和内存分配,C缺少工具支持

Why is the linux kernel not implemented in C++?
除了接受的答案另见Ben Collins’ answer.

Linus Torvalds on C++

“[…] anybody who designs his kernel modules for C++ is […]
(b) a C++ bigot that can’t see what he is writing is really just C anyway”

” – the whole C++ exception handling thing is fundamentally broken. It’s especially broken for kernels.
– any compiler or language that likes to hide things like memory allocations behind your back just isn’t a good choice for a kernel.”

JOINT STRIKE FIGHTER AIR VEHICLE C++ CODING STANDARDS

“AV Rule 208 C++ exceptions shall not be used”

>异常处理和内存分配是C显然缺少工具支持的唯一点(在这种情况下)?
>要解决异常处理问题,必须提供绑定的时间,直到异常被抛出后被捕获.
你能解释一下为什么内存分配是一个问题吗?如何克服这个问题呢,要做什么呢?

正如我看到的那样,在这两种情况下,必须在编译时提供一个发生的事情,并且依赖于运行时的东西.

回答:

>不,动态演员也是一个问题,但it has been solved.
>基本上yes.处理异常所需的时间必须通过分析所有投掷路径来限制.
>在Embedded systems programming中看到幻灯片上的解决方案“如何生活没有新的”.简而言之:预分配(全局对象,堆栈,池).

解决方法

那么有几件事情.首先,您必须记住,STL完全基于操作系统程序,C标准库和动态分配.当你编写一个内核时,你没有动态内存分配(你提供它)没有C标准库(你必须提供一个构建在你的内核之上),你正在提供系统调用.那么存在这样一个事实:C在组装过程中很好地很容易地连接,而C是非常难以与组装接口的,因为ABI不一定是常数,也不是名字.由于名称的变化,你会得到一个全新的并发症.

然后,当您构建操作系统时,您需要知道并控制内核使用的内存的每个方面.在C中,有很多隐藏的结构,你无法控制(vtables,RTTI,异常)会严重干扰你的工作.

换句话说,Linus所说的是,通过C,您可以轻松了解正在生成的程序集,并且它可以直接在机器上运行.虽然C可以,但是您总是必须设置相当多的上下文,并且还要做一些C来接口程序集和C.另外一个原因是在系统编程中,你需要准确地知道方法调用方式. C有很好的记录C调用约定,但在C你有这个处理,名称变化等

简而言之,这是因为C没有你问你的事情.

Per @ Josh的评论在下面,C背后的另一件事是构造函数和析构函数.它们增加了进入和退出堆栈帧的开销,最重要的是使汇编互操作更加困难,因为当您销毁C堆栈帧时,必须调用其中的每个对象的析构函数.这很快就会丑陋

猜你在找的C&C++相关文章