我正在编写一个连续运行的应用程序while(1)并等待中断(基本上是RING)来解码消息。因此,当我成功解码消息时,我只需要打印它并开始等待另一个中断(一条新消息)。
我想在开始新消息之前清除所有数据结构。所以我只是释放指针,然后将它们放回去。但是当我这样做时,数据结构中仍然有一些字段包含旧数据。所以我只是使用calloc()来清除所有内存以清除旧数据。
我知道通过调用free释放的内存不会立即返回到操作系统,它仍然位于可用内存池中,但是malloc可以返回相同的已释放内存吗?
if(res){ // If decoded successfully
display_CID_info(cs, cs_data); // Display CallerID message
free(cs); // Free the CID data structure
free(cs_data); // Free message data structure
/* Allocate Data structures again for next iteration */
cs_data = malloc(sizeof(cid_data));
cs = calloc(1, sizeof(*cid));
}
答案 0 :(得分:3)
是的,这完全有可能。当您调用free时,内存管理器会将该部分内存标记为片段,可能将其与相邻片段组合,但不会将数据设置为全零。 malloc()
函数也不会将所有数据都设置为全零。
例如,如果您的程序中第一次调用free()
并且紧跟一个malloc()
以获得相同或更少的内存,则完全有可能内存管理器将重用旧片段。