同一個(gè)網(wǎng)站可以同時(shí)做競(jìng)價(jià)和優(yōu)化百度熱門(mén)排行榜
文章目錄
- RT-Thread 堆內(nèi)存 檢查命令 free 實(shí)現(xiàn)及介紹
- rt_memory_info 函數(shù)驗(yàn)證
RT-Thread 堆內(nèi)存 檢查命令 free 實(shí)現(xiàn)及介紹
在RT-Thread系統(tǒng)中,通??梢酝ㄟ^(guò)rt_memory_info
函數(shù)獲取當(dāng)前的堆內(nèi)存使用信息,然后你可以包裝這個(gè)函數(shù)來(lái)顯示剩余的堆空間。rt_memory_info
實(shí)現(xiàn)見(jiàn):
rt-thread/src/mem.c
:
void rt_memory_info(rt_uint32_t *total,rt_uint32_t *used,rt_uint32_t *max_used)
{if (total != RT_NULL)*total = mem_size_aligned;if (used != RT_NULL)*used = used_mem;if (max_used != RT_NULL)*max_used = max_mem;
}
rt-thread 中其實(shí)已經(jīng)實(shí)現(xiàn)了cmd_free
函數(shù),可以使用這個(gè)函數(shù)來(lái)查看當(dāng)前堆的使用情況:
#ifdef RT_USING_HEAP
int cmd_free(int argc, char **argv)
{rt_uint32_t total = 0, used = 0, max_used = 0;rt_memory_info(&total, &used, &max_used);rt_kprintf("total : %d\n", total);rt_kprintf("used : %d\n", used);rt_kprintf("maximum : %d\n", max_used);return 0;
}
MSH_CMD_EXPORT_ALIAS(cmd_free, free, Show the memory usage in the system.);
#endif /* RT_USING_HEAP */
所以在終端執(zhí)行free
命令即可查看堆的使用情況:
msh >help
RT-Thread shell commands:
list - list all commands in system
list_timer - list timer in system
list_mempool - list memory pool in system
list_memheap - list memory heap in system
list_msgqueue - list message queue in system
list_mailbox - list mail box in system
list_mutex - list mutex in system
list_event - list event in system
list_sem - list semaphore in system
list_thread - list thread
version - show RT - Thread version information
clear - clear the terminal screen
hello - say hello world
free - Show the memory usage in the system.
ps - List threads in the system.
help - RT - Thread shell help.
rt_memory_info 函數(shù)驗(yàn)證
如下實(shí)現(xiàn)了一個(gè)測(cè)試函數(shù),在函數(shù)開(kāi)始的時(shí)候查看當(dāng)前堆使用了多少,然后再進(jìn)行rt_malloc(1024)
之后再查看下堆使用了多少,通過(guò)前后對(duì)比可以看出rt_memory_info
函數(shù)獲取的信息是否正確。
#include <rtthread.h>
#include <pthread.h>#define TEST_MALLOC_SIZE 1024static int mem_check_test(void)
{char *ptr = RT_NULL;rt_uint32_t total = 0, used_pre = 0, max_used = 0;rt_uint32_t used_next = 0;rt_memory_info(&total, &used_pre, &max_used);ptr = (char *)rt_malloc(TEST_MALLOC_SIZE);if (ptr == RT_NULL) {rt_kprintf("mem check test failed\n");return -RT_ENOMEM;}rt_memory_info(&total, &used_next, &max_used);if ((used_next - used_pre) != TEST_MALLOC_SIZE + 16) {rt_kprintf("mem check test failed\n""mem used_pre: %d, mem used_next:%d\n",used_pre, used_next);rt_free(ptr);return -RT_ERROR;}rt_kprintf("mem check test ok\n");rt_free(ptr);return RT_EOK;
}
INIT_APP_EXPORT(mem_check_test);
關(guān)于free
命令的本地測(cè)試如下:
通過(guò)執(zhí)行free命令之后可以看到一共有多少heap和已經(jīng)使用了多少。
通常需要在跑完測(cè)試用例后不能影響heap的大小,簡(jiǎn)單點(diǎn)說(shuō)就是你的測(cè)試case不能導(dǎo)致內(nèi)存泄露。