【问题标题】:What is a "FPE_FLTSUB: subscript out of range" signal?什么是“FPE_FLTSUB:下标超出范围”信号?
【发布时间】:2015-11-08 02:57:44
【问题描述】:

sys/signal.h 中,SIGFPE 的可能代码之一是FPE_FLTSUB,其注释只是说“下标超出范围 -NOTIMP”。我使用的是 OS X 10.9,但它似乎在 glibc as well 中。

这不是标准的 IEEE 例外之一,那么它是什么,何时提出?

【问题讨论】:

  • 用于数组边界外的访问。
  • @Barmar 你有更多信息或链接吗?我认为 C 数组没有经过边界检查:是否保证总是在越界访问时发出信号?
  • 它们不需要进行边界检查。但这并不意味着他们不能。如果一个实现检查边界,他们可以使用这个信号来报告它。此外,C 不是世界上唯一的语言,其他语言也会进行边界检查。
  • 还要注意它说“未实现”。如果曾经实现过这样的事情,它只是一个信号的占位符。
  • 啊,我没听懂缩写词。谢谢。

标签: c signals sigfpe


【解决方案1】:

当 x86 BOUND 指令检测到数组索引越界时,FreeBSD 会使用 SIGFPE 生成此代码。看起来 Linux 会生成 SIGSEGV

这不是特别重要,因为最好避免使用BOUND 指令。它在 64 位模式下不可用,并且在大多数现代处理器上,即使索引在界限内,它也非常慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多