prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 11.28

Q什么是noalias它去哪了?


A noalias是另一种类型限定符,与constvolatile属于同一语法类别,旨在断言一个对象没有被其他指针指向(“别名化”)。其主要应用场景(也是一个重要的场景)是函数的形式参数,这些函数被设计用于对大型数组执行计算。编译器通常无法利用向量化或其他并行化硬件(如果超级计算机拥有这些硬件)的优势,除非它能确保源数组和目标数组不重叠。

noalias关键字没有得到任何“先例”的支持,并且是在审查和批准过程的后期才引入的。它在精确定义和连贯解释方面异常困难,引发了广泛且尖锐的辩论,包括丹尼斯·里奇(Dennis Ritchie)的严厉批评。它产生了深远的意义,特别是对几个标准库接口,它们没有显而易见的简单修复方法。

由于批评以及定义noalias良好之处的困难,委员会决定不采纳它,尽管它表面上很吸引人。(在编写标准时,不能半途引入功能;必须理解其完整集成和所有影响。)对并行实现非重叠操作提供显式机制的需求仍然未得到满足(尽管目前正在解决该问题)。

参考文献:ISO Sec. 6.9.6


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管