C++ Arduino中的预定义数组

C++ Arduino中的预定义数组,c++,arrays,arduino,C++,Arrays,Arduino,我遇到了一个非常奇怪的问题,程序使用的内存量似乎没有改变,而与数组大小无关 我正在使用Arduino编译器,下面是代码示例: unsigned char ary[]={0x00,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00, 0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03,}; void setup() { // put your setup code here, to

我遇到了一个非常奇怪的问题,程序使用的内存量似乎没有改变,而与数组大小无关

我正在使用Arduino编译器,下面是代码示例:

unsigned char ary[]={0x00,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,
    0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03,};
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
如果移除数组并重新编译,文件大小仍然相同。也许我已经离开编码领域一段时间了,有什么想法吗

unsigned char ary[] = {
  0x00,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,
    0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03,
};

unsigned char var1;

    void setup() {
      // put your setup code here, to run once:
      int res = myFunction(&ary[0]);

    }

    void loop() {
      // put your main code here, to run repeatedly:

    }

    int myFunction (unsigned char *adr){
      //unsigned char b=4;
      unsigned char c;
      for(int n=0;n<1;n++)c=adr[0];
      var1=c;
      return 0;
    }
无符号字符[]={
0x00,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,
0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03,
};
无符号字符var1;
无效设置(){
//将安装代码放在此处,以便运行一次:
int res=myFunction(&ary[0]);
}
void循环(){
//将主代码放在此处,以便重复运行:
}
int myFunction(无符号字符*adr){
//无符号字符b=4;
无符号字符c;

对于(int n=0;n,Arduino编译器会自动取出不在任何地方使用的部分代码:死代码消除

例如,如果您添加

ary[0]  = 5;
在“设置”或“循环”零件中,草图尺寸会增大,并且在将图元添加到
ari
时会继续增大


没有添加行,我有一个444字节(和9字节的动态内存)的草图。添加行后,它有494字节(和31字节的内存)。

感谢您的帮助,我使用的每个平台上不同的优化设置产生了不同的结果。尝试禁用arduino的优化,它构建了完整的文件大小(无论是否访问数据)。如果有人感兴趣,这里有一个链接,介绍如何执行此操作(请记住在更改前保存副本):


注意,可执行文件与加载的程序不同。可能有最小大小的头文件、修复信息等,加载后这些信息都消失了。文件大小与所用内存的关系很小。我可以用几行代码填充虚拟内存。如果没有,它可能会被优化在任何地方使用我正在处理的原始文件有一个5Kb的数组,但输出编译文件大小始终是相同的,大约600字节。我确实尝试在一行代码中使用它,以防它在程序中被优化为不使用。在程序中仍然得到相同的结果文件大小。因此,检查一下,我添加了一个新的在我的原始查询下面的测试代码块中,当我们为(int n=0;要添加,我尝试添加const关键字,但没有对输出进行任何更改。使用您关于尝试在我的主代码中修改数组位置0的示例,编译器现在“可能正确”地抱怨我的5k文件太大,而以前它似乎对它很满意。奇怪的是,它只在我尝试添加时将其标记出来o向现有数组位置添加一个字节。我尝试使用其他软件进行编译,似乎在最终输出中包含了整个数组。也许arduino编译器有什么奇怪的地方?