1

我的操作系统类分配需要定义一个名为的 C 函数free,它的工作方式与 libc 不同free。(我们正在做一个内存分配器练习。)

我所有的代码都使用我自己的变体free,所以在我自己的代码中这不是问题。然而,当 glibc 在free内部使用时(例如用于 vprintf),它最终会使用 myfree而不是它自己的。

我正在使用 Ubuntu 11.10(libc6 版本 2.15-0ubuntu10)。我听说它不会发生在其他 Ubuntu 版本上,我想知道我是否可以通过一些编译/链接标志来获得其他版本的行为。

顺便说一句,命名自己的函数free不是最佳实践,但假设我别无选择:-)

4

2 回答 2

2

如果您的函数具有外部链接,请不要命名free它,函数名称保留作为具有外部链接的标识符。

(C99,7.1.3p1)“在以下任何子条款(包括未来的库方向)中具有外部链接的所有标识符始终保留用作具有外部链接的标识符。”

于 2012-06-05T22:27:20.057 回答
1

如果您要替换freemalloc使用与标准函数不同的函数,那么您可能应该使用 C 库中的任何其他“方便”函数。只需坚持read(2)write(2)为您的 IO - 或编写您自己的包装器并read(2)提供write(2)各种便利功能。getc(3)printf(3)

于 2012-06-05T22:15:55.093 回答