gpt4 book ai didi

c - 可变大小数组的内存分配机制

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:01 25 4
gpt4 key购买 nike

我无法理解可变大小数组的工作原理,它的内存是分配在堆栈上还是其他地方,以及如何获取有关其大小的信息。

我尝试了下面的代码

#include<stdio.h>

int main()
{
int n;
scanf("%d",&n);

int arr[n];

printf("%d\n",sizeof(arr));

return 0;
}

我的意思是我的内存是在堆栈上分配的,然后在运行这个函数之前,堆栈帧将被分配,局部变量的内存必须被分配,但是数组的大小在函数调用 scanf() 之后是已知的。

最佳答案

在大多数具有内存保护等功能的现代系统上,您可以只增加堆栈。如果访问增长的堆栈导致访问的内存实际上超出了进程的有效虚拟内存范围,则操作系统将捕获它并按照您的方式映射更多内存。

所以“即时”执行此操作没有问题,当然“在堆栈上分配 n 个字节”通常与“stackpointer -= n”一样复杂。

如果函数有很多退出路径,可能会有一些额外的复杂性,因为它们需要展开适当数量的堆栈,具体取决于可变长度数组是否已分配,不确定通常如何解决。这将是一个简单的代码阅读练习。

关于c - 可变大小数组的内存分配机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700405/

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