关于pbuf的分配和释放:每发完一个UDP之后,释放pbuf,然后再下一个包发送之前会申请一个pbuf,但是,我检测每次申请的新的pbuf的地址都是递增的,每次递增64B,它是与pbuf的大小最匹配的一个zone。
若干数据包之后,内存就溢出了。这个有办法解决吗?是pbuf释放的有问题?
这个和你的应用有关系。但是,如果使用RT的内存管理,不加入lwIP的补丁,在TCP反复连接,断开会很容易造成内存耗光
TCP的传输我们现在还没有发现内存溢出的问题,我现在遇到的问题是关于UDP发送的。
udp_sendto_if()中的“q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM)”分配了一块内存,然后调用ip_output_if()继续向底层走,然后发送成功后返回到udp_sendto_if()继续走,然后调用“pbuf_free(q)”回收之前分配的内存。问题就出在这里,这个q并没有被回收,当要进行下一个数据包的发送时,再次调用pbuf_alloc()时这个q的地址是以64Byte递增的。这个问题如何解决呢?
我用的是RTT的内存管理。
我在slab.c中看slab分配时,发现每一个UDP发送,它申请的z_uindex就自加一,所以导致分配的chunk的地址就每次向上递增,但是z_nfree在每次分配的时候是和z_nmax相等,而且z_freechunk就是上一个数据包回收的chunk地址。这个z_uindex难道不应该是回收后就自减的吗?