首页 > 解决方案 > Mac OS Catalina sbrk 已弃用

问题描述

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

标签: cmacosmallocdeprecatedsbrk

解决方案


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

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

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

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

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


推荐阅读