如何克服C对嵌入式系统缺乏工具支持?
问题不在于
Linux内核.这不是C对C的辩论.
我做了一个研究,在我看来,对于嵌入式系统的异常处理和内存分配,C缺少工具支持: Why is the linux kernel not implemented in C++? Linus Torvalds on C++:
JOINT STRIKE FIGHTER AIR VEHICLE C++ CODING STANDARDS:
>异常处理和内存分配是C显然缺少工具支持的唯一点(在这种情况下)? 正如我看到的那样,在这两种情况下,必须在编译时提供一个发生的事情,并且依赖于运行时的东西. 回答: >不,动态演员也是一个问题,但it has been solved. 解决方法
那么有几件事情.首先,您必须记住,STL完全基于操作系统程序,C标准库和动态分配.当你编写一个内核时,你没有动态内存分配(你提供它)没有C标准库(你必须提供一个构建在你的内核之上),你正在提供系统调用.那么存在这样一个事实:C在组装过程中很好地很容易地连接,而C是非常难以与组装接口的,因为ABI不一定是常数,也不是名字.由于名称的变化,你会得到一个全新的并发症.
然后,当您构建操作系统时,您需要知道并控制内核使用的内存的每个方面.在C中,有很多隐藏的结构,你无法控制(vtables,RTTI,异常)会严重干扰你的工作. 换句话说,Linus所说的是,通过C,您可以轻松了解正在生成的程序集,并且它可以直接在机器上运行.虽然C可以,但是您总是必须设置相当多的上下文,并且还要做一些C来接口程序集和C.另外一个原因是在系统编程中,你需要准确地知道方法的调用方式. C有很好的记录C调用约定,但在C你有这个处理,名称变化等 简而言之,这是因为C没有你问你的事情. Per @ Josh的评论在下面,C背后的另一件事是构造函数和析构函数.它们增加了进入和退出堆栈帧的开销,最重要的是使汇编互操作更加困难,因为当您销毁C堆栈帧时,必须调用其中的每个对象的析构函数.这很快就会丑陋 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |