gpt4 book ai didi

c - 是否也为数组变量分配内存来存储数组中第一个元素的地址?

转载 作者:行者123 更新时间:2023-11-30 14:51:21 27 4
gpt4 key购买 nike

void func()
{
int arr[5]={1,2,3,4,5};
int variable = arr[1]; //variable will be set to 2
}

当该程序执行时,将在虚拟地址空间的堆栈区域中分配相当于 5 个整数的连续内存,如下所示,对于 5 个整数的数组。

   +---+
| | a[0]
+---+
| | a[1]
+---+
| | a[2]
+---+
| | a[3]
+---+
| | a[4]
+---+

虚拟地址空间(代码/数据/堆栈/堆段中)中是否有空间为数组变量arr分配 本身而不是 5 个整数的数组?

如果没有分配,那么-

考虑代码片段 - int variable = arr[1];编译器将其转换为 *(arr+1)并将出现在地址空间的代码段中,该地址空间是只读

arr 怎么样?被计算为数组的起始地址 arr在每个函数调用期间func ?由于每次调用该函数时,调用堆栈的地址都可能发生变化,因此数组的地址 arr也发生变化。因此,无需为数组变量 arr 提供单独的空间如何实现这一目标?

最佳答案

How does the arr is evaluated to the starting address of the array arr during every function call func?

在 x86 架构上的典型实现中,arr 的位置将取决于堆栈指针 (esp) 或< em>帧指针 (ebp),即:它将通过应用固定偏移量根据这些指针寄存器之一进行定义嗯>。

每次调用 func() 时可能不同的是这些指针寄存器的,而不是arr 的方式。 是根据这些定义的(即:固定偏移量)。

关于c - 是否也为数组变量分配内存来存储数组中第一个元素的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364713/

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