C语言寄存器(register)
示例
提示编译器对对象的访问应尽可能快。编译器是否实际使用提示是实现定义的;它可能只是将其等同于auto。
对于所有声明有对象的唯一不同的属性register是,它们无法计算其地址。从而register可以成为确保某些优化的好工具:
register size_t size = 467;
是一个永远不会别名的对象,因为没有代码可以将其地址传递给可能意外更改的另一个函数。
此属性还暗示着一个数组
register int array[5];
不能衰减为指向其第一个元素的指针(即array变成&array[0])。这意味着无法访问此类数组的元素,并且数组本身无法传递给函数。
实际上,用register存储类声明的数组的唯一合法用法是sizeof运算符;任何其他运算符都需要数组第一个元素的地址。出于这个原因,通常不应该使用register关键字声明数组,因为它会使数组无法用于除整个数组的大小计算之外的其他操作,而无需使用register关键字就可以轻松地完成数组的大小计算。
的register存储类是更适合于被一个块内定义并与高频被访问的变量。例如,
/* 打印前5个整数之和 */C11/*假定为函数体一部分的代码*/
{
register int k, sum;
for(k = 1, sum = 0; k < 6; sum += k, k++);
printf("\t%d\n",sum);
}
还允许将运算符_Alignof与register数组一起使用。
以上是 C语言寄存器(register) 的全部内容, 来源链接: utcz.com/z/356814.html