gpt4 book ai didi

c - 是否可以将整个数组保存在 cpu 寄存器中

转载 作者:太空狗 更新时间:2023-10-29 16:50:49 24 4
gpt4 key购买 nike

在下面的代码中,

int main( )
{
register int arr[4];
/* ... */
}

'arr' 是否有可能分配在某个 cpu 寄存器中。(考虑 cpu 有 4 个或更多寄存器)。

否则编译器将忽略注册数组的存储类。

最佳答案

根据我的理解,答案是YESNO

因为,

  1. 任何数组元素都必须是显式可寻址的(例如,对于 16 位 uC/uP,其地址应始终位于 0x0000 到 0xFFFF 地址空间之间。)

  2. CPU 寄存器使用register direct 寻址模式(例如mov r2,#100)访问。这种寻址方式没有有效地址。 (甚至不认为是一种寻址模式)

  3. 数组元素必须位于连续的内存位置。 (对于指针运算,使用数组的主要原因)

因为,

  1. 编译器可以为上面的数组分配寄存器,这样我们就可以对它进行一些有限的操作。但是不能使用内部使用地址进行优化的操作。

见下面的代码。

int main( )
{
register int arr[4];
int i;

arr[0] = 10; /* OK */
arr[1] = 20; /* OK */
arr[2] = 30; /* OK */
arr[3] = 40; /* OK */

for(i=0;i<4;i++)
arr[i]=10; /* Error : "address of register variable 'arr' requested" */

return 0;
}

所以我的最终结论是,理想情况下,register 存储类永远不应该与 array 一起使用,即使您的编译器允许也是如此。

请纠正我或提供更多信息。 :-)

关于c - 是否可以将整个数组保存在 cpu 寄存器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17342881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com