该标准在5.3.4/7中说:
当direct-new-declarator中的表达式的值为零时,将调用分配函数以分配不带元素的数组.
......并且,在3.7.3.1/2中:
取消引用作为零大小请求返回的指针的效果是未定义的.
...但是,指针不能是空指针.
由于实际解除引用指针是未定义的行为,是否有任何实现返回指向保护页面的指针?我想这很容易,并且有助于检测错误/提高安全性.
我查看了(草案)标准,但找不到任何明确禁止这样做的内容。不过,我猜答案是“不”。这就是为什么:
一种可能的实现可以通过保留一系列未分页内存来完成,每次有人调用 new int[0] 时,它都可以返回该范围内的不同地址(如果分配器保留全局计数器或类似的东西,则很容易做到)。
从好的方面来说,您将能够立即检测此类指针的取消引用。另一方面,您将失去检测双重释放的能力,因为指针上的删除实际上变成了无操作,并且在所有正常情况下,您将使新的和删除变得更加复杂和缓慢。
因此,因为这很难做到,而且弊大于利,所以我非常有信心没有人这样做。
Linux 上的 gcc 只是分配少量内存并返回它。我相信这几乎是执行此操作的标准方法。
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |