Mac OS Catalina sbrk 已弃用

Mac OS Catalina sbrk is deprecated

我正在尝试在 C 中实现自己的内存分配器。当我尝试在 Mac OS Catalina 上的终端中编译我的代码时,它说函数“sbrk”已弃用。有人知道解决这个问题的解决方案吗?网上的其他解决方案似乎有点过时了。

“已弃用”表示例程仍然可用(目前),但建议您不要在新软件中使用它。如果您只是为了 experimental/learning 目的而编写,您仍然可以编译。使用开关 -Wno-deprecreated-declarations 关闭警告信息。如果您正在编写要发布或长期使用的软件,请使用 mmap.

在实践中,术语“弃用”(如相关词“过时”)至少可以表示三种不同的含义:

  1. 此功能预计将在{软件,标准}的未来版本中删除。使用它的代码可能会停止工作。
  2. 我们认为此功能不好,您不应该使用它。
  3. 我们想到了此功能的更好版本。我们认为您应该改用它。

很多时候,这些含义是组合使用的。一个例子是 C 库函数 gets(),几乎每个人都认为它是坏的(所以意味着 #2 适用),实际上现在已经从 C 标准中删除了(所以意味着 #1 也适用)。

据我所知,sbrk 是意义#3 的一个例子。这并没有什么特别的问题,但是有更好、更现代的方法来做同样的事情——尽管更新的方法也可能更复杂,这意味着如果你想保持原样,就有动力用旧的方法来做事情简单。这类事情的其他例子是系统调用 signalcreat.

冒着编辑的风险(好吧,我承认,我 编辑),这意味着当涉及到语言或标准演变时,#3 会变得有趣。如果你相信向后兼容性和长期稳定性,如果你相信程序员应该能够编写出善意的代码并永远拥有它 运行,你就不会仅仅因为意义#就把意义#1 扔给他们。 3 适用。但是如果你想强迫人们像你一样思考,并且如果你已经放弃了软件稳定性(因为一切都在不断地被重写以跟上新功能和新错误以及新改变的标准),并且如果你认为向后兼容性是向后的,工作量太大,你可以一直使用意义#1,即使它让我上了树。 :-(