问题描述
我正在尝试用 C 语言实现我自己的内存分配器。当我尝试在 Mac OS Catalina 的终端中编译我的代码时,它说函数“sbrk”已被弃用。有人知道解决这个问题的解决方案吗?网上的其他解决方案似乎有点过时了。
解决方法
“已弃用”表示该例程仍然可用(目前),但建议您不要在新软件中使用它。如果您只是出于实验/学习目的而编写,则无论如何都可以编译。使用开关 -Wno-deprecreated-declarations
关闭警告消息。如果您正在编写要发布或长期使用的软件,请使用 mmap
。
实际上,术语“已弃用”(如相关的“过时”一词)至少可以表示三种不同的含义:
- 预计将在 { software,standard } 的未来版本中删除此功能。您使用它的代码可能会停止工作。
- 我们认为此功能很糟糕,我们认为您不应该使用它。
- 我们想到了此功能的更好版本。我们认为您应该改用它。
很多时候,这些含义是结合使用的。一个例子是 C 库函数 gets()
,几乎每个人都同意它是 Bad(所以意味着 #2 适用),并且实际上现在已经从 C 标准中删除(因此意味着 #1 也适用)。
据我所知,sbrk
是含义 #3 的一个示例。它没有什么特别的错误,但是有更好、更现代的方法来做同样的事情——尽管更新的方法也可能更复杂,这意味着如果你想保持原样,就有动力去用旧的方法事情简单。此类事情的其他示例是系统调用 signal
和 creat
。
冒着编辑的风险(好吧,我承认,我正在编辑),这意味着 #3 在语言或标准演变方面会变得有趣。如果您相信向后兼容性和长期稳定性,如果您相信程序员应该能够编写善意的代码并让它永远运行,那么您不会仅仅因为含义 #3 适用而向他们抛出含义 #1。但是如果你想强迫人们像你一样思考,如果你已经放弃了软件的稳定性(因为一切都在不断地被重写以跟上新功能和新错误以及新变化的标准),并且如果你认为向后兼容性是向后和太多的工作,您可以一直使用含义#1,即使它让我感到沮丧。 :-(