我正在尝试用 C 语言实现自己的内存分配器。当我尝试在 Mac OS Catalina 的终端中编译代码时,它说函数“sbrk”已被弃用。有人知道解决这个问题的解决方案吗?网上的其他解决方案似乎有点过时了。
在实践中,术语“已弃用”(如相关词“过时”)可以表示至少三种不同的含义:
很多时候,这些含义会结合使用。 一个例子是 C 库函数
gets()
,几乎每个人都认为它是“坏”的(因此意味着 #2 适用),并且实际上现在已从 C 标准中删除(因此意味着 #1 也适用)。
据我所知,
sbrk
是第3个含义的一个例子。 这并没有什么特别错误的地方,但是有更好、更现代的方法来做同样的事情——尽管新的方法也可能更复杂,这意味着如果你想保留的话,就有动力用旧的方法来做。事情很简单。 此类事情的其他示例是系统调用 signal
和 creat
。
冒着编辑的风险(好吧,我承认,我正在编辑),这意味着当涉及到语言或标准的演变时,#3 会变得有趣。 如果您相信向后兼容性和长期稳定性,如果您相信程序员应该能够编写善意的代码并使其永远运行,您就不会仅仅因为含义#3适用就向他们抛出含义#1。 但是,如果您想强迫人们像您一样思考,并且您已经放弃了软件稳定性(因为无论如何,一切都在不断重写以跟上新功能、新错误和新更改的标准),并且如果您认为向后兼容是向后的,而且工作量太大,你可以一直使用意义#1,即使它让我上树。 :-(