存储地址的c语言函数,c – 存储在寄存器中的变量的地址

您所在的位置:网站首页 c语言存储地址的变量 存储地址的c语言函数,c – 存储在寄存器中的变量的地址

存储地址的c语言函数,c – 存储在寄存器中的变量的地址

2023-07-18 12:37| 来源: 网络整理| 查看: 265

首先,C标准禁止使用已声明注册的变量的地址,就像在结构体中的位域一样.

对于非注册(“auto”)变量,简短的答案是肯定的.优化器的最简单的策略是立即溢出其地址被占用的变量.

“溢出”只是从寄存器分配的文献中的一个术语,意思是“决定将其置于记忆而不是注册”.

复杂的优化器可以进行别名分析,并且仍然在寄存器中保存一个值,尽管它的地址已被采用.无论何处可以证明生成的指针不可能用于更改值,这是可能的.

另一个相关的优化是实时分割.这允许将变量存储在寄存器中用于存储有用值(其“活动范围”)的部分指令范围,并将其溢出到其他部分.在这种情况下,溢出的部分将对应于指针可能用于更改变量值的位置.例如:

x = 3;

... lots of computations involving x

if T {

// SPILL HERE, so store register holding x to memory

int *p = &x;

... lots of computations, perhaps using p to change x

*p = 2;

// DONE SPILL HERE, so reload register

... more code here not using p to change x.

}

else {

... lots of computations involving x.

}

该代码的积极优化器可能为x分配堆栈位置,但将其加载到代码顶部的注册表中,将其保留在除了标记为SPILL的区域之外.该区域将被存储器的存储器和匹配的寄存器负载包围.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3