c语言学习笔记(register关键字)

本文讨论了在编程中如何通过`register`关键字将局部变量存储在CPU寄存器以提升效率,强调了register变量的类型限制、内存地址不可取、适用范围以及寄存器数量的局限性。32位系统中,通用寄存器如eax,ebx等可用于存放整型数据,但结构体变量由于字节大小超出限制无法建议使用此优化。
摘要由CSDN通过智能技术生成

register :这个关键字建议编译器尽可能的将变量存在cpu内部寄存器中而不是通过内存寻址访问以提高效率

int main()
{
	int i = 0;
	int n = 1000;
	register int c = 0; // 建议将c放进cpu的某个寄存器中
	for (i = 0; i < n; i++)
	{
		c++;
	}
	return 0;
}

几点限制:

1  register变量必须是能被cpu所接受的类型(这个变量一般是单个值,且长度小于或等于整型的长度,有些寄存器不能放浮点数)

2  register 变量可能不存放在内存中,所以不能用&来取地址

3  只有局部变量和形式参数可以作为寄存器变量,全局变量不行(因为会一直占着寄存器,局部变量用完就释放了)

4  静态局部变量不能定义为寄存器变量

5  寄存器数量有限,不能定义多个,并且起不起作用看编译器(因为只是建议)

cpu 寄存器            32位来说

通用寄存器          32    4字节

eax

ebx

ecx

edx

要存放结构体变量就不能建议,因为超过了cpu字节大小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值