[英]Why am I limited to an arbitrary small ( array size when initializing an array with a const length in C?
[英]why is array size limited when declared at compile time?
例如我可以做
int *arr;
arr = (int *)malloc(sizeof(int) * 1048575);
但如果程序不崩溃,我就无法做到这一点:
int arr[1048575];
为什么会这样?
假设arr
是一个局部变量,将其声明为数组使用(相对有限)堆栈中的 memory,而malloc()
使用(相对无限)堆中的 memory。
如果您将这些分配为函数中的局部变量(这是唯一可以让指针声明紧跟malloc
调用的地方),那么区别在于malloc
将从堆中分配一块 ZCD69B4957F06CD818D7BF3D61 并给您它的DE291地址,同时直接做int arr[1048575];
将尝试在堆栈上分配 memory。 堆栈的可用空间要少得多。
堆栈的大小有限,我知道有两个主要原因:
当你声明一个数组时,你就是把它放在堆栈上。
当您调用 malloc() 时,memory 将从堆中取出。
与堆相比,堆栈通常更受限制,并且通常是瞬态的(但这取决于您进入和退出声明此数组的 function 的频率。
对于这么大的(也许不是今天的标准?)memory,假设您希望阵列持续一段时间,malloc 是一个很好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.