Kernel 模板是否用于C++;需要一些任务初始化吗? 在能够使用C++的一些特性来开发内核之前,必须做一些工作。例如,为了能够有效地使用类,必须使例程调用构造函数和析构函数属性

Kernel 模板是否用于C++;需要一些任务初始化吗? 在能够使用C++的一些特性来开发内核之前,必须做一些工作。例如,为了能够有效地使用类,必须使例程调用构造函数和析构函数属性,kernel,c++,Kernel,C++,可以禁用其他不需要的功能,例如RTTI(运行时类型信息) 假设类工作正常,那么使用模板还需要做什么额外的工作吗?我认为主要的问题是编写运行时代码来遍历堆栈以进行异常处理。内核和编译器需要就调用约定的细节达成一致,比如堆栈的结构,以及如何注册、发现和调用析构函数 如果您想支持异常处理,那么您(基本上)必须启用RTTI,因为C++ catch < /Cord>语义进行动态类型匹配。 另一个问题可能是内存分配new很自然地映射到malloc,但是如果您有一个带有额外参数的奇怪的kmalloc(就像L

可以禁用其他不需要的功能,例如RTTI(运行时类型信息)


假设类工作正常,那么使用模板还需要做什么额外的工作吗?

我认为主要的问题是编写运行时代码来遍历堆栈以进行异常处理。内核和编译器需要就调用约定的细节达成一致,比如堆栈的结构,以及如何注册、发现和调用析构函数

如果您想支持异常处理,那么您(基本上)必须启用RTTI,因为C++ <代码> catch < /Cord>语义进行动态类型匹配。 另一个问题可能是内存分配

new
很自然地映射到
malloc
,但是如果您有一个带有额外参数的奇怪的
kmalloc
(就像Linux一样),那么可能需要一些思考


模板以及对构造函数和析构函数的调用(除了异常处理之外)的放置完全由编译器处理,因此应该“正常工作”。

是的,我认为操作符重载应该“正常工作”。如果您的内核使用的调用约定与用户级别使用的调用约定相同,那么让异常正常工作可能也不会太难。在gcc中,我认为(但不确定)与系统相关的运行时相关的库是
libsupc++
libstdc++-v3的子集。在链接器脚本中(如果使用异常处理)不要丢弃eh_framed也很重要。Torvalds很可能会为此给你一些牢狱之灾。