0

我目前正在编写自己的内核自下而上,我在线性内存管理器中遇到了这个小问题,我似乎无法理解。

我有以下代码; void* end_page_address = /*(void*)*/ 0x3FF000;

但是,当禁用 void 指针强制转换时,g++ 会出现以下错误;

src/paging/LinearMemoryManager.cpp: In constructor 'LinearMemoryManager::LinearMemoryManager(PhysicalMemoryManager*)': src/paging/LinearMemoryManager.cpp:87:42: error: invalid conversion from 'int' to 'void*' [-fpermissive]

怎么会?- 因为它显然通常不需要,因为它上面的行在没有演员表的情况下编译得很好:

void* start_page_address = 0x00000000;

4

1 回答 1

1

我认为地址为 0 的 NULL 指针(甚至写为0x00000或类似)值得在 C++ 规范(以及 GCC 编译器内部)中进行特定处理。顺便说一句,添加了 C++11nullptr及其类型,这是有充分理由的。

但是非零地址void* end_page_address = (void*) 0x3FF000; 需要显式转换。

我希望您在使用 C++ 编写内核时了解 C++ 技巧(异常、构造函数、RTTI...)。您可能需要准确了解您的特定版本如何g++处理它们。

我也希望你的内核是自由软件(GPL-ed),并且你遵循“早发布,经常发布”的座右铭。我很想看看它的源代码。

于 2012-09-10T15:12:48.213 回答