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

如何克服C对嵌入式系统缺乏工具支持?,第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 kerne 问题不在于 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中看到幻灯片上的解决方案“如何生活没有新的”.简而言之:预分配(全局对象,堆栈,池).

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

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

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

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

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

总结

以上是内存溢出为你收集整理的如何克服C对嵌入式系统缺乏工具支持?全部内容,希望文章能够帮你解决如何克服C对嵌入式系统缺乏工具支持?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1251481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存