gpt4 book ai didi

c - 在内存中分配静态和自动数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:58 26 4
gpt4 key购买 nike

我做了以下代码来检查内存中的数据分配。我有一个 4 GB 的 RAM,我了解到外部变量存储在内存的静态数据空间中,而自动变量则在堆栈中。
gcc -v 命令给出线程模型:win32。如果我使用 auto_array,程序就会崩溃。但 ext_array 不会发生这种情况。我如何知道 stack 的确切大小和内存的静态数据空间?是否还有其他影响分配的因素?

#include <stdio.h>
#define MB 1024*1024

char ext_array[1*1024*MB];

int main()
{
//char auto_array[10*MB];
return 0;
}

最佳答案

这与堆栈大小有关。

对于全局数组,数据段中的部分是在程序开始时预先分配的。而对于自动变量,它会在函数(在您的情况下为 main)被调用时分配。

根据您的链接器命令文件,将定义最大堆栈大小。如果该大小小于 1 GB,则在函数调用时,将分配堆栈帧,这通常会占用堆。

如果必须使用自动变量,请检查编译器的链接器命令文件,看看是否可以编辑堆栈大小。

关于c - 在内存中分配静态和自动数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19675880/

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