C语言 --- Register 寄存器变量解析

本文介绍了如何通过register声明提升程序性能,关注了寄存器变量的使用限制、平台差异以及为何访问寄存器变量地址会报错。重点讲述了变量申明方式、寄存器使用策略和实际应用中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Register 寄存器变量

定义

register声明告诉编译器,它所申明的变量在程序中使用频率较高。其思想是:将register变量到寄存器中,这样可以使程序更小、执行速度更快。但是编译器可以忽略此选项。

用法

register 只适用于自动变量以及函数的参数。

  1. register申明变量的形式如下:
register int a;
int register b;

这两种形式都是可以的,但第一种会简单明了一些。

  1. register申明函数参数
int func(register char ch, register long int b)
{
	register int a;
}

总结

  1. 数量有限

    实际使用时,底层硬件环境的实际情况对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是过量的寄存器申明并没有什么坏处,这是因为编译器可以忽略过量的或不支持的寄存器变量申明。

  2. 平台差异
    在不同的机器中,对寄存器变量的数目和类型的具体限制也是不同的。

  3. 无法访问地址
    无论寄存器变量实际上是不是存放在寄存器中,它的地址都不是不能访问的。如果我们访问了寄存器变量的地址,编译的时候是会报错的。
    在这里插入图片描述
    想一下,这是为什么?很简单,因为我们的应用程序是跑在内存中的,内存中经过映射的虚拟地址空间的中低0~3G的地址都是我们可以访问的。但是register 寄存器变量是存放在寄存器中的所以我们是无法访问的,相当于访问了非法的地址,所以编译的时候是会报错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值