【发布时间】:2019-07-20 10:47:21
【问题描述】:
我正在开发在 COOJA 模拟器中使用的代码。我使用malloc() 进行所有动态内存分配。在模拟运行时,COOJA 微粒会定期重启,最后我收到一个错误,告诉我原因是我正在使用malloc()。
我正在考虑使用名为“mmem”的 Contiki 的特定内存分配类。我找不到任何使用它的例子。这是一个示例,其中我使用malloc() 为名为@987654325@ 的字符串分配内存。
如何将 malloc() 替换为 mmem 而不是 malloc()?
char *sent;
sent = (char*)malloc(120);
strncpy(sent , "example" , 7);
strncat(sent , "|", 1);
【问题讨论】:
-
为什么不在堆栈上分配 120 字节?
-
就我而言,字符和字符串之间会有很多转换,我对此不感兴趣。
-
我想我不明白。如果您预先知道分配大小(您的示例代码建议),为什么不直接在堆栈上分配呢?低资源设备上的嵌入式开发和动态分配通常以碎片化结束,导致耗尽,这可能是导致崩溃的原因。甚至 Contiki 的文档也提到了这一点。尽管如此,我假设您已经阅读了本指南:github.com/contiki-os/contiki/wiki/…?
-
我不确定我是否完全理解您所指的解决方案。你能解释一下我如何在堆栈上分配吗?老实说,我不明白您所说的“堆栈”是什么意思。
-
栈 vs 堆是 C 编程的核心概念,我很难在这里用 600 个字符来解释它。基本上不是
char* sent = malloc(120);,而是char sent[120];等。
标签: c heap-memory contiki cooja