没有特别大的区别。都是初始化参数时的结构体,只不过这些名字不一样。
就跟
char a,b,c,d;
类似。
Count%16,实际就是只保留了低四位,就和高四位的变化无关。
比如说Count从15变成16的时候,即0x0F变成0x10,但是Count%16运算的结果就是0。或者从17变成31(0x11-0x1F),Count%16的结果还是0x01~0x0F。
你改成Count0x0F效果也一样,并且这样看着更直观。
根据你提供的信息,推测你使用的应该是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一类的函数在堆上动态分配空间。
本文标签:stm32声明组数