STM32局部变量的数组最大能到多少
答案:2 悬赏:10 手机版
解决时间 2021-03-28 22:56
- 提问者网友:鼻尖触碰
- 2021-03-27 23:28
STM32局部变量的数组最大能到多少
最佳答案
- 五星知识达人网友:煞尾
- 2021-03-27 23:57
stm32的局部变量存放于堆栈中,所以一个局部变量数组最大能到多少与启动文件下的堆栈大小 Stack_Size 有关,一般为0x00000400即1024个字节,你所能定义的最大数组数就是
Stack_Size-其它局部量占用,具体多少由你的程序决定。
当然,你也可以改Stack_Size的大小,如0x1000,不过一般用不着这么大
参考:网页链接
Stack_Size-其它局部量占用,具体多少由你的程序决定。
当然,你也可以改Stack_Size的大小,如0x1000,不过一般用不着这么大
参考:网页链接
全部回答
- 1楼网友:长青诗
- 2021-03-28 01:11
根据你提供的信息,推测你使用的应该是Tiny C Complier编译器,这是一个32位的编译器,那么int应该为32位,4个字节。
先看看数组的大小,int a[664579],那么大小为664579×4=2658316,也就是2.5M
C语言的局部变量在在栈上分配空间,TCC默认的栈大小为1M,显然会造成栈溢出,程序崩溃。
最新版的TCC提供了自定义栈大小的参数,如下面:
tcc -Wl,--stack=4194309
将栈大小指定为4M。
不知道你的TCC版本是否支持这个参数。
而全局变量在堆上分配空间,Win32应用程序可访问的地址空间是4G,一般来说进程实际能使用的是远远达不到这个值,但是在放一个2.5M的数组还是绰绰有余的。所以作为全局变量程序可正常运行。
所以程序中要使用大型数组,要么定义为全局变量,要么使用malloc一类的函数在堆上动态分配空间。
先看看数组的大小,int a[664579],那么大小为664579×4=2658316,也就是2.5M
C语言的局部变量在在栈上分配空间,TCC默认的栈大小为1M,显然会造成栈溢出,程序崩溃。
最新版的TCC提供了自定义栈大小的参数,如下面:
tcc -Wl,--stack=4194309
将栈大小指定为4M。
不知道你的TCC版本是否支持这个参数。
而全局变量在堆上分配空间,Win32应用程序可访问的地址空间是4G,一般来说进程实际能使用的是远远达不到这个值,但是在放一个2.5M的数组还是绰绰有余的。所以作为全局变量程序可正常运行。
所以程序中要使用大型数组,要么定义为全局变量,要么使用malloc一类的函数在堆上动态分配空间。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯